lizhen_gitee 3 miesięcy temu
rodzic
commit
66e399c717
1 zmienionych plików z 128 dodań i 75 usunięć
  1. 128 75
      addons/unishop/controller/Order.php

+ 128 - 75
addons/unishop/controller/Order.php

@@ -360,80 +360,112 @@ class Order extends Base
                 break;
         }
 
-        /*if ($order['have_paid'] != \addons\unishop\model\Order::PAID_NO) {
+        if ($order['have_paid'] != \addons\unishop\model\Order::PAID_NO) {
             $this->error('此订单已支付,无法取消');
-        }*/
-        if ($order['have_delivered'] != \addons\unishop\model\Order::DELIVERED_NO) {
-            $this->error('此订单已发货,无法取消');
+        }
+        if ($order['have_received'] != \addons\unishop\model\Order::RECEIVED_NO) {
+            $this->error('此订单已核销,无法取消');
         }
 
-//        if ($order['status'] == \addons\unishop\model\Order::STATUS_NORMAL && $order['have_paid'] == \addons\unishop\model\Order::PAID_NO) {
-        if ($order['status'] == \addons\unishop\model\Order::STATUS_NORMAL && $order['have_delivered'] == \addons\unishop\model\Order::DELIVERED_NO) {
+        if ($order['status'] == \addons\unishop\model\Order::STATUS_NORMAL && $order['have_paid'] == \addons\unishop\model\Order::PAID_NO) {
+            $order->status = \addons\unishop\model\Order::STATUS_CANCEL;
+            $order->canceltime = time();
+            $order->save();
 
-            Db::startTrans();
-            /*$order->status = \addons\unishop\model\Order::STATUS_CANCEL;
-            $order->save();*/
-
-
-            //已付款的,自动退款
-            if($order['have_paid'] != \addons\unishop\model\Order::PAID_NO){
-                $refund_amount = $order['total_price'];
-                $refund_status = 3;
-
-                // 退款
-                $params = [
-                    'refund_status' => $refund_status,
-                    'updatetime'    => time(),
-                    'refund_amount' => $refund_amount,
-                    'status' => \addons\unishop\model\Order::STATUS_CANCEL,
-                ];
-                if($refund_status == 3) {
-                    $params['had_refund'] = time();
-                }
+            //归还优惠券
+            $coupon_user_id = Db::name('unishop_order_extend')->where('order_id',$order_id)->value('coupon_user_id');
+            if(!empty($coupon_user_id)){
+                Db::name('unishop_coupon_user')->where('id',$coupon_user_id)->where('user_id',$this->auth->id)->update(['status'=>0]);
+            }
 
-                $result = Db::name('unishop_order')->where(['id' => $order_id])->update($params);
-                if (!$result) {
-                    Db::rollback();
-                    $this->error('取消失败');
-                }
+            $this->success('取消成功', true);
+        }
+    }
+    //已支付取消,申请退订
+    public function payed_cancel()
+    {
+        $order_id = input('order_id', 0);
+        $order_id = \addons\unishop\extend\Hashids::decodeHex($order_id);
 
-                //同意并执行退款
-                if($refund_status == 3 && $refund_amount > 0){
-                    $order = Db::name('unishop_order')->where('id',$order_id)->find();
-
-                    if($order['pay_type'] == 2){
-                        $wallet = new \app\common\model\Wallet();
-                        $wallet_rs = $wallet->lockChangeAccountRemain($order['user_id'],'money',$refund_amount,32,'商城取消订单退款'.$order['out_trade_no'],'unishop_order',$order_id);
-                        if($wallet_rs['status'] === false){
-                            Db::rollback();
-                            $this->error($wallet_rs['msg']);
-                        }
-                    }elseif($order['pay_type'] == 3 || $order['pay_type'] == 4){
-                        $refund_result = $this->old_refund($order,$refund_amount);
-                        if($refund_result !== true){
-                            Db::rollback();
-                            $this->error($refund_result);
-                        }
-                    }
+        $orderModel = new \addons\unishop\model\Order();
+        $order = $orderModel->where(['id' => $order_id, 'user_id' => $this->auth->id])->find();
 
-                }
-            }else{
-                $params = [
-                    'status' => \addons\unishop\model\Order::STATUS_CANCEL,
-                ];
-                $result = Db::name('unishop_order')->where(['id' => $order_id])->update($params);
-                if ($result === false) {
-                    Db::rollback();
-                    $this->error('取消失败');
-                }
+        if (!$order) {
+            $this->error(__('Order not exist'));
+        }
+
+        switch ($order['status']) {
+            case \addons\unishop\model\Order::STATUS_REFUND:
+                $this->error('此订单已退款,无法取消');
+                break;
+            case \addons\unishop\model\Order::STATUS_CANCEL:
+                $this->error('此订单已取消, 无需再取消');
+                break;
+        }
+
+        if ($order['have_paid'] == \addons\unishop\model\Order::PAID_NO) {
+            $this->error('未支付订单,直接取消即可');
+        }
+        if ($order['have_received'] != \addons\unishop\model\Order::RECEIVED_NO) {
+            $this->error('此订单已核销,无法退订');
+        }
+
+        Db::startTrans();
+        if ($order['status'] == \addons\unishop\model\Order::STATUS_NORMAL && $order['have_received'] == \addons\unishop\model\Order::RECEIVED_NO) {
+
+            $refund_amount = $order['total_price'];
+            $refund_status = 3; //申请售后状态 0=无,1=申请中,2=通过(让用户发货),3=通过,4=拒绝
+
+            // 退款
+            $params = [
+                'refund_status' => $refund_status,
+                'updatetime'    => time(),
+                'refund_amount' => $refund_amount,
+                'status' => \addons\unishop\model\Order::STATUS_CANCEL,
+                'canceltime'    => time(),
+            ];
+            if($refund_status == 3) {
+                $params['had_refund'] = time();
             }
 
-            Db::commit();
+            $result = Db::name('unishop_order')->where(['id' => $order_id])->update($params);
+            if (!$result) {
+                Db::rollback();
+                $this->error('取消失败');
+            }
 
-            $this->success('取消成功', true);
+            //归还优惠券
+            $coupon_user_id = Db::name('unishop_order_extend')->where('order_id',$order_id)->value('coupon_user_id');
+            if(!empty($coupon_user_id)){
+                Db::name('unishop_coupon_user')->where('id',$coupon_user_id)->where('user_id',$this->auth->id)->update(['status'=>0]);
+            }
+
+            //同意并执行退款
+            if($refund_status == 3 && $refund_amount > 0){
+                $order = Db::name('unishop_order')->where('id',$order_id)->find();
+
+                if($order['pay_type'] == 2){
+                    $wallet = new \app\common\model\Wallet();
+                    $wallet_rs = $wallet->lockChangeAccountRemain($order['user_id'],'money',$refund_amount,32,'商城取消订单退款'.$order['out_trade_no'],'unishop_order',$order_id);
+                    if($wallet_rs['status'] === false){
+                        Db::rollback();
+                        $this->error($wallet_rs['msg']);
+                    }
+                }elseif($order['pay_type'] == 3){
+                    $refund_result = $this->old_refund($order,$refund_amount);
+                    if($refund_result !== true){
+                        Db::rollback();
+                        $this->error($refund_result);
+                    }
+                }
+
+            }
         }
-    }
 
+        Db::commit();
+
+        $this->success('退订成功', true);
+    }
     // 退款
     public function old_refund($order, $refund_price)
     {
@@ -821,9 +853,9 @@ class Order extends Base
                     'products' => function ($query) {
                         $query->field('id,order_id,image,number,price,spec,title,product_id');
                     },
-                    'extend' => function ($query) {
+                    /*'extend' => function ($query) {
                         $query->field('id,order_id,address_id,address_json,express_number,express_company');
-                    },
+                    },*/
                     'evaluate' => function ($query) {
                         $query->field('id,order_id,product_id');
                     }
@@ -833,23 +865,24 @@ class Order extends Base
             if ($order) {
                 $order = $order->append(['state', 'paidtime', 'deliveredtime', 'receivedtime', 'commentedtime', 'pay_type_text', 'refund_status_text'])->toArray();
 
+                $order['state_text'] = $orderModel->getStatetextAttr($order['state'],$order['refund_status']);//状态中文
                 // 快递单号
-                $order['express_number'] = $order['extend']['express_number'];
+               /* $order['express_number'] = $order['extend']['express_number'];
                 $order['express_company'] = '快递单号';
                 $order['express'] = '';
                 if (class_exists(\addons\expressquery\library\Expressquery::class)) {
                     $expressInfo = Db::name('expressquery')->where(['express' => $order['extend']['express_company']])->find();
                     $order['express_company'] = $expressInfo['name'] ?? '快递单号';
                     $order['express'] = $expressInfo['express'] ?? '';
-                }
+                }*/
 
                 // 送货地址
-                $address = json_decode($order['extend']['address_json'], true);
+                /*$address = json_decode($order['extend']['address_json'], true);
 
                 $delivery['username'] = $address['name'];
                 $delivery['mobile'] = $address['mobile'];
                 $delivery['address'] = $address['province_name'] . ' ' . $address['city_name'] . ' ' . $address['area_name'] . ' ' . $address['address'];
-                $order['delivery'] = $delivery;
+                $order['delivery'] = $delivery;*/
 
                 // 是否已评论
                 $evaluate = array_column($order['evaluate'], 'product_id');
@@ -864,6 +897,11 @@ class Order extends Base
 
                 unset($order['evaluate']);
                 unset($order['extend']);
+                unset($order['pay_out_trade_no']);
+
+                //电子凭证,核销码
+                $qrcode_string = 'order_hexiao_no|' . $order['out_trade_no'];
+                $order['order_hexiao_qrcode'] = httpurllocal($this->inviteimage($qrcode_string));
             }
 
         } catch (Exception $e) {
@@ -873,6 +911,25 @@ class Order extends Base
         $this->success('', $order);
     }
 
+    //生成核销码
+    private function inviteimage($introcode) {
+        $params['text'] = $introcode;
+        $qrcode_service = \addons\qrcode\library\Service::qrcode($params);
+
+        $qrcodePath = ROOT_PATH . 'public/uploads/qrcode/';
+        if (!is_dir($qrcodePath)) {
+            @mkdir($qrcodePath);
+        }
+        if (is_really_writable($qrcodePath)) {
+            $filename = md5(implode('', $params)) . '.png';
+            $filePath = $qrcodePath . $filename;
+            $qrcode_service->writeFile($filePath);
+        }
+
+        return '/uploads/qrcode/' . $filename;
+    }
+
+
     /**
      * @ApiTitle    (申请售后信息)
      * @ApiSummary  (申请售后信息)
@@ -1138,11 +1195,7 @@ class Order extends Base
         ]);
     }
 
-    /*
-     * 申请退货原因
-     * */
-    public function refund_reason(){
-        $list = Db::name('unishop_refundreason')->order('weigh asc')->select();
-        $this->success(1,$list);
-    }
+
+
+
 }