Explorar o código

0724-1720-c01

zory hai 1 semana
pai
achega
7b132b2295

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

@@ -4,6 +4,7 @@ namespace app\controller\api;
 
 use app\extra\basic\Base;
 use app\model\saas\SaasOrder;
+use app\model\saas\SaasOrderItem;
 use LinFly\Annotation\Attributes\Route\Controller;
 use LinFly\Annotation\Attributes\Route\PostMapping;
 use support\Request;
@@ -28,6 +29,7 @@ class Notify extends Base
             $order = (new SaasOrder)->where("out_order_no",$orderSn)->findOrEmpty();
             if ($order->isEmpty()) return json(['err_no' => 0,'err_tips' => "success"]);
             if ($order['status'] <> 0) return json(['err_no' => 0,'err_tips' => "success"]);
+            (new SaasOrderItem)->where("order_sn",$order['order_sn'])->update(['status' => 1]);
             $order->status = 1;
             $order->pay_at = getDateFull();
             $order->pay_type = $data['pay_channel'];
@@ -93,7 +95,19 @@ 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"]);
-            $order->status = 3;
+            $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']) { // 部分退款
+                $order->status = 6;
+            } 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"]);

+ 4 - 1
app/controller/api/Order.php

@@ -8,6 +8,7 @@ use app\extra\dyMini\Pay;
 use app\middleware\AuthMiddleware;
 use app\model\saas\SaasComplaint;
 use app\model\saas\SaasOrder;
+use app\model\saas\SaasOrderItem;
 use app\model\saas\SaasOrderPrice;
 use app\service\saas\OrderService;
 use DI\Attribute\Inject;
@@ -153,7 +154,9 @@ class Order extends Base
             if (!is_array($param)) return error($param);
             echo getDateFull()."===>订单详情\n";
             echo json_encode($param)."\n";
-            $order = $this->model->where("out_order_no",$param['order'])->with(['product','poi'])->findOrEmpty();
+            $order = $this->model->where("out_order_no",$param['order'])->with(['product','poi'])->append(['refund_num'])->withAttr(['refund_num' => function($data,$next){
+                return (new SaasOrderItem)->where(['order_sn' => $next['order_sn'],'status' => 2])->count();
+            }])->findOrEmpty();
             if ($order->isEmpty()) return errorTrans("empty.data");
             $order['end_time'] = timeDiff(strtotime("+30 minutes",strtotime($order['create_at'])),time());
             return $this->encode("ok",$order->toArray());

+ 14 - 3
app/controller/api/Solution.php

@@ -10,6 +10,7 @@ use app\middleware\AuthMiddleware;
 use app\model\saas\SaasGoods;
 use app\model\saas\SaasGoodsSku;
 use app\model\saas\SaasOrder;
+use app\model\saas\SaasOrderItem;
 use LinFly\Annotation\Attributes\Route\Controller;
 use LinFly\Annotation\Attributes\Route\GetMapping;
 use LinFly\Annotation\Attributes\Route\RequestMapping;
@@ -31,8 +32,8 @@ class Solution extends Base
     {
         try {
             $data = $request->all();
-            echo getDateFull()."===扩展回调\n";
-            print_r($data);
+//            echo getDateFull()."===扩展回调\n";
+//            print_r($data);
             if (isset($data['operate_type'])) {
                 if ($data['status'] == "PASS") { // 创建商品回调
                     $goods = (new SaasGoods)->where("goods_id",$data['product_id'])->findOrEmpty();
@@ -56,7 +57,7 @@ class Solution extends Base
                     case "pre_create_refund": // 退款回调
                         $order = (new SaasOrder)->where("order_sn",$msgData['order_id'])->findOrEmpty();
                         if ($order->isEmpty()) return json(['err_no' => 0,"err_tips" => "success"]);
-                        if ($order['status'] <> 1) return json(['err_no' => 0,"err_tips" => "success"]);
+                        if (!in_array($order['status'],[1,6])) return json(['err_no' => 0,"err_tips" => "success"]);
                         $order->status = 4; // 退款中
                         $order->refund_msg = json_encode($msgData['refund_reason']);
                         $order->refund_apply = getDateFull();
@@ -106,6 +107,16 @@ class Solution extends Base
                             "mobile"        => $msgData['phone_num']??'',
                             "pay_money"     => $msgData['total_amount']??0,
                         ]);
+                        $itemData = [];
+                        foreach ($msgData['item_order_info_list'] as $key=>$val) {
+                            $itemData[$key] = [
+                                "order_sn"      => $msgData['order_id'],
+                                "item_order_id" => $val['item_order_id']
+                            ];
+                        }
+                        if (!empty($itemData)) {
+                            (new SaasOrderItem)->insertAll($itemData);
+                        }
                         return json(['err_no' => 0,"err_tips" => "success","data" => [
                             "order_entry_schema"    => [
                                 "path"      => "pages/order/detail",

+ 31 - 1
app/controller/merchant/Order.php

@@ -7,6 +7,7 @@ use app\extra\dyLife\data\OrderData;
 use app\middleware\AuthMiddleware;
 use app\model\saas\SaasOrder;
 use app\model\saas\SaasOrderAddress;
+use app\model\saas\SaasOrderItem;
 use app\model\saas\SaasStore;
 use app\service\saas\GoodsService;
 use app\service\saas\OrderService;
@@ -50,8 +51,10 @@ class Order extends Base
                 }]);
             },'user' => function($query){
                 $query->field("openid,nickname,avatar");
-            }],true,['end_time'],["end_time" => function ($resp,$next) {
+            }],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();
             }]);
             return successTrans("success.data",pageFormat($data),200);
         } catch (\Throwable $throwable) {
@@ -77,6 +80,33 @@ class Order extends Base
         }
     }
 
+
+    #[PostMapping('save')]
+    public function setOrderData(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "order.require" => trans("empty.require"),
+                "field.require" => trans("empty.require"),
+                "val.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();
+            if ($order->isEmpty()) return errorTrans("empty.data");
+            if ($order['poi_id'] <> $request->user['store_id'] && $request->user['is_super'] == 0) return errorTrans("empty.data");
+            if ($param['field'] == 'status' && $param['val'] == 1) {
+                (new SaasOrderAddress)->where(["openid" => $order['openid'],'order_sn' => $order['out_order_no']])->delete();
+            }
+            $state = $order->save([
+                $param['field'] => $param['val']
+            ]);
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
     /**
      * 手动核销
      * @param Request $request

+ 37 - 0
app/model/saas/SaasOrderItem.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace app\model\saas;
+
+use app\extra\basic\Model;
+
+class SaasOrderItem 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_item";
+
+    /**
+     * 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;
+
+}

+ 1 - 0
app/service/saas/OrderService.php

@@ -28,6 +28,7 @@ class OrderService extends Service
         $filter = [];
         !empty($param['openid']) && $filter[] = ["openid", '=', $param['openid']];
         !empty($param['poi_id']) && $filter[] = ["poi_id", '=', $param['poi_id']];
+        !empty($param['error']) && $filter[] = ["is_error", '=', $param['error']];
         !empty($param['status']) && $filter[] = ["status", '=', ($param['status']-1)];
         !empty($param['express_status']) && $filter[] = ["express_status", '=', $param['express_status']];
         !empty($param['statusIn']) && $filter[] = ["status", 'in', $param['statusIn']];