<?php
namespace app\api\controller\h5;

use app\hander\HelpHander;

use EasyWeChat\Factory;
use think\Db;

class GOrders extends Base
{
    //从购物车去结算生成订单
    public function create(){
        $cartId=input('cart_id/s');
        $addressId=input('address_id/d',0);
        $delivery_type=input('delivery_type/d',0);
        $delivery_date=input('delivery_date');
        $ret = model('GOrders')->add($cartId,$addressId,$this->userId,$this->orgId,$delivery_type,$delivery_date);
        if(!$ret){
            HelpHander::error(model('GOrders')->getError());
        }
        HelpHander::success(['id'=>$ret],'成功');
    }

    //立即购买生成订单
    public function createOne(){
        $goodsId=input('goods_id/d');
        $addressId=input('address_id/d',0);
        $nums=input('nums/d',0);
        $delivery_type=input('delivery_type/d',0);
        $delivery_date=input('delivery_date');
        $ret = model('GOrders')->addOne($goodsId,$addressId,$nums,$this->userId,$this->orgId,$delivery_type,$delivery_date);
        if(!$ret){
            HelpHander::error(model('GOrders')->getError());
        }
        HelpHander::success(['id'=>$ret],'成功');
    }

    //商城订单列表
    public function orderList(){
        $page=input('page/d',1);
        $size=input('size/d',20);
        $ret = model('GOrders')->lists($page,$size,$this->userId,$this->orgId);
        HelpHander::success($ret);
    }

    //订单详情
    public function orderDetails(){
        $orderId=input('order_id/d',0);
        $ret = model('GOrders')->details($orderId);
        HelpHander::success($ret);
    }

    //订单完成
    public function orderAccomplish(){
        $ordersId=input('order_id/d',0);
        model('GOrders')->accomplish($ordersId);
        HelpHander::success([],'订单已完成');
    }
    //取消订单
    public function cancelOrder(){
        $id = input('id',0);
        $data = [
            'status'=>3,
            'cancel_time'=>date('Y-m-d H:i:s')
        ];
        $ret = Db::name('g_orders')->where('id',$id)->update($data);
        //取消订单添加库存
        $orderGoods = Db::name('g_order_goods')
            ->where('order_id',$id)
            ->select();
        foreach ($orderGoods as $k=>$v){
            Db::name('g_goods')
                ->where('id',$v['goods_id'])
                ->inc('stock',$v['nums'])
                ->update();
        }
        if($ret){
            HelpHander::success([],'取消成功');
        }else{
            HelpHander::error([],'取消失败');
        }
    }
    //继续支付
    public function goPay(){
        $id = input('id',0);
        $order = Db::name('g_orders')->where('id',$id)->where('status',0)->find();
        if(!$order){
            HelpHander::error('订单不存在');
        }
        $config = config('app.wx_config');
        $notify = config("app.app_host").'/api/h5/notify/xshopOrder';
        $openid = Db::name('wxuser')->where('id',$this->userId)->where('type',1)->value('openid');
        $app = Factory::payment($config);
        $result = $app->order->unify([
            'body' => '商城',
            'out_trade_no' => $order['order_sn'],
            'total_fee' => $order['amount']*100,
            'notify_url' => $notify, // 支付结果通知网址,如果不设置则会使用配置里的默认地址
            'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
            'openid' => $openid,
        ]);
        if($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){
            $jssdk = $app->jssdk;
            $ret = $jssdk->sdkConfig($result['prepay_id']); // 返回数组
            HelpHander::success($ret,'成功');
        }else{
            HelpHander::error('支付失败');
        }

    }

}