| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 | <?phpnamespace app\api\controller;use app\common\controller\Api;use think\Db;/** * 核销 */class Hexiao extends Api{    protected $noNeedLogin = [];    protected $noNeedRight = ['*'];    //订单详情    //code:order_hexiao_no|2024090466d7c9d5abb1c1    //order_no:2024090466d7c9d5abb1c1    public function order_info()    {        if($this->auth->group_id != 3){$this->error('没有权限');}        $code = input('code','');        if(strpos($code,'order_hexiao_no|') !== 0){            $this->error('识别不到的订单');        }        $order_no = substr($code,16);        $order_info = Db::name('unishop_order')->where('out_trade_no',$order_no)->find();        if(empty($order_info)){            $this->error('不存在的订单');        }        if($order_info['status'] != 1){            $this->error('该订单已取消');        }        if($order_info['have_paid'] == 0){            $this->error('未支付的订单');        }        if($order_info['have_received'] != 0){            $this->error('该订单已核销');        }        //下面是从unishop/order.php  detail方法里拿过来的        $order_id = $order_info['id'];        $orderModel = new \addons\unishop\model\Order();        $order = $orderModel            ->with([                'products' => function ($query) {                        $query->field('id,order_id,image,number,price,spec,title,product_id');                    },                /*'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');                }*/            ])            ->where(['id' => $order_id])->find();        if ($order) {            $order = $order->append(['state', 'paidtime'])->toArray();            // 快递单号            /*$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);            $area = (new \addons\unishop\model\Area())                ->whereIn('id', [$address['province_id'], $address['city_id'], $address['area_id']])                ->column('name', 'id');            $delivery['username'] = $address['name'];            $delivery['mobile'] = $address['mobile'];            $delivery['address'] = $area[$address['province_id']] . ' ' . $area[$address['city_id']] . ' ' . $area[$address['area_id']] . ' ' . $address['address'];            $order['delivery'] = $delivery;*/            // 是否已评论//                $evaluate = array_column($order['evaluate'], 'product_id');            foreach ($order['products'] as &$product) {                $product['image'] = cdnurl($product['image']);                /*if (in_array($product['id'], $evaluate)) {                    $product['evaluate'] = true;                } else {                    $product['evaluate'] = false;                }*/                $product_find = Db::name('unishop_product')->where('id', $product['product_id'])->find();                $product['info'] = $product_find['info'];                $product['activetime'] = $product_find['activetime'];                //限定核销产品                /*if(!in_array($product['product_id'],explode(',',$this->auth->product_ids))){                    $this->error('您无法核销当前订单,请移至正确核销点,或联系客服','',2);                }*/            }//                unset($order['evaluate']);            unset($order['extend']);            unset($order['pay_out_trade_no']);            //预约日期            $week_data = [                0 => '周日',                1 => '周一',                2 => '周二',                3 => '周三',                4 => '周四',                5 => '周五',                6 => '周六',                7 => '周日',            ];            $order['bookdate'] = date('Y-m-d H:i',$order['booktime']) .' '. $week_data[date('w',$order['booktime'])];            //追加退改规则            $order['order_refund_rule'] = config('site.order_refund_rule');            //电子凭证,核销码            /*$qrcode_string = 'order_hexiao_no|' . $order['out_trade_no'];            $order['order_hexiao_qrcode'] = httpurllocal($this->inviteimage($qrcode_string));*/        }        //追加退改规则        $this->success(1,$order);    }    //完成核销动作    public function hexiao(){        if($this->auth->group_id != 3){$this->error('没有权限');}//        $order_id = input('order_id', 0);//        $order_id = \addons\unishop\extend\Hashids::decodeHex($order_id);        $code = input('code','');        if(strpos($code,'order_hexiao_no|') !== 0){            $this->error('识别不到的订单');        }        $out_trade_no = substr($code,16);        Db::startTrans();        $order = Db::name('unishop_order')->where(['out_trade_no' => $out_trade_no])->lock(true)->find();        if (!$order) {            Db::rollback();            $this->error('不存在的订单');        }        if($order['status'] != 1){            Db::rollback();            $this->error('非正常的订单');        }        if($order['have_paid'] == 0){            Db::rollback();            $this->error('未支付的订单');        }        if($order['have_received'] != 0){            Db::rollback();            $this->error('该订单已核销');        }        //限定核销产品        /*$products = Db::name('unishop_order_product')->where('order_id',$order['id'])->select();        foreach($products as $key => $product){            if(!in_array($product['product_id'],explode(',',$this->auth->product_ids))){                $this->success('您无法核销当前订单,请移至正确核销点,或联系客服','',2);            }        }*/        $update = [            'have_received' => time(),            'hexiao_uid'    => $this->auth->id,        ];        $order_rs = Db::name('unishop_order')->where('id',$order['id'])->update($update);        if($order_rs === false){            Db::rollback();            $this->error('核销失败');        }        //给推广人结算        /*if($order['intro_uid']){            $bili = config('site.unishop_order_intromoney_bili');            $money = bcdiv(bcmul($order['total_price'],$bili,2),100,2);            if($money > 0){                $rs_wallet = model('Wallet')->lockChangeAccountRemain($order['intro_uid'],'money',$money,10,'推广订单:'.$out_trade_no,'unishop_order',$order['id']);                if($rs_wallet['status']===false)                {                    Db::rollback();                    $this->error($rs_wallet['msg']);                }            }        }*/        Db::commit();        $this->success('核销成功');    }    //核销记录    public function order_list(){        if($this->auth->group_id != 3){$this->error('你是不是来错地方了?');}        $orderModel = new \addons\unishop\model\Order();        $condition = [            'hexiao_uid' => $this->auth->id,            'status'     => 1,            'have_paid'         => ['gt',0],            'have_delivered'    => ['gt',0],            'have_received'     => ['gt',0],        ];        $result = $orderModel            ->with([                'products' => function($query) {                        $query->field('id,title,image,number,price,spec,order_id,product_id');                    },            ])            ->where($condition)            ->order(['have_received' => 'desc'])            ->autopage()            ->select();        //预约日期        $week_data = [            0 => '周日',            1 => '周一',            2 => '周二',            3 => '周三',            4 => '周四',            5 => '周五',            6 => '周六',            7 => '周日',        ];        foreach ($result as &$item) {            $item->append(['order_id','state']);            $item = $item->toArray();            unset($item['pay_out_trade_no']);            /*$evaluate = array_column($item['evaluate'], 'product_id');            $refundProducts = array_column($item['refund_products'], 'order_product_id');            unset($item['evaluate']);            unset($item['refund_products']);*/            foreach ($item['products'] as &$product) {                $product['image'] = cdnurl($product['image']);                // 是否已评论                /*if (in_array($product['id'], $evaluate)) {                    $product['evaluate'] = true;                } else {                    $product['evaluate'] = false;                }*/                // 是否退货                /*if ($item['refund_status'] == self::REFUND_STATUS_AGREE && in_array($product['order_product_id'], $refundProducts)) {                    $product['refund'] = true;                } else {                    $product['refund'] = false;                }*/            }            $item['bookdate'] = date('Y-m-d H:i',$item['booktime']) .' '. $week_data[date('w',$item['booktime'])];        }        $this->success(1,$result);    }}
 |