Disclosure of code for secondary development of stock capital system docking with Tencent data interface

Disclosure of code for secondary development of stock capital system docking with Tencent data interface

    /*
     * 发送返利给推荐人
     * 返利金额
     * @param $recommender 推荐人id
     * @param $investor 配资人id
     * @param $borrowId 配资ID
     * @param $memberInfo 会员信息及资金信息数据集
     * @return true 无论是否成功,都返回true,不影响后续操作
     */
public function sendRebate($recommender, $borrowId,$memberInfo)
    {
    
    
        $result = false;
        $borrowInfo = self::get($borrowId);
        $money=0;
        if($borrowInfo['type'] == "按月配资"){
    
    //如果是按月配资
            $money = $borrowInfo['borrow_interest'] * $borrowInfo['borrow_duration']; //利息
        } elseif( $borrowInfo['type'] == "按天配资") {
    
    //如果是按天配资
            $money = $borrowInfo['borrow_interest'];
        }
        $rate = config('rebate');//获取全局参数推荐人返佣比例
        $amount = $money * $rate / 100;//返佣
        //备注说明信息
        $info = "您推荐的用户" . $memberInfo['mobile'] . "(".$memberInfo['name'].")配资成功,配资管理费:" . ($money/100) . "元,您获得返利: " . ($amount/100) . "元.";
        将返佣插入推荐人返佣资金记录表
        $dataRecord['mid'] = $recommender;//$investor;
        $dataRecord['money'] = $amount;
        $dataRecord['remark'] = $info;
        $dataRecord['create_time'] = time();
        $record = Db::name('member_invitation_record')->insert($dataRecord);
        $money_info=Money::getMoney($recommender);
        if(isset($money_info['account'])){
    
    
            $mmoney['account']=$money_info['account']+$amount;
            $money_res=Money::money_up($recommender,$mmoney);
        }else{
    
    
            $mmoney['account']=$money_info['account'];
            $money_res=false;
        }
        //将返佣插入资金记录
        $RecordModel = new RecordModel();
        $moneyRecord = $RecordModel->saveData($recommender,$amount,$mmoney['account'],10,$info);
        if($record && $moneyRecord&&$money_res){
    
    
            $result = true;
        }else{
    
    
            $result = false;
        }
        return $result;
    }

    /*
     * 查询正在操盘中的配资总金额
     *
     * @param $accountID 证券id
     * @return 返回配资总金额
     */
//    public static function getBorrowmoney($accountID){
    
    
//        $total=Db::query("select sum(b.init_money) as borrowMoney from lmq_stock_borrow b where b.member_id in(select u.uid from lmq_stock_subaccount u where u.account_id =".$accountID."  GROUP BY u.uid) and status =1");
//        return intval($total[0]['borrowMoney']);
//    }
    /*
     * 查询正在操盘中的实盘配资总金额
     * @param $accountID 证券id
     * @return 返回配资总金额
     */
    public static function getRealBorrowmoney($accountID){
    
    
        //$res=Db::name("stock_subaccount")->field("uid")->where(["account_id"=>$accountID])->group("uid")->select();
        $total=Db::name("stock_borrow")
            //->where("member_id","in",$res)
            ->where(["status" =>1])
            ->where(["account_id" =>$accountID])
            ->sum("init_money");
        return intval($total[0]['borrowMoney']);
    }
    /*
     * 根据ID返回配资记录
     * @id 配资记录ID
     */
    public static function getBorrowById($id,$status=null)
    {
    
    
        if($status==null){
    
    
            return   $binfo = Db::name("stock_borrow")->where(["id"=>$id])->find();
        }else{
    
    
            return   $binfo = Db::name("stock_borrow")->where(["id"=>$id,'status'=>$status])->find();
        }
    }

    /*
     * 是否已有试用、免费、模拟操盘校验
     */
    public function trycheck($mid,$type){
    
    
        return Db::name('stock_borrow')
            ->where(['member_id'=>$mid])
            ->where(['type'=>$type])
            ->where('status','<>','0')
            ->find();
    }

insert image description here
insert image description here
insert image description here
insert image description here

/**
 * 配资管理模型
 * @package app\stock\model
 */
class Borrow extends ThinkModel
{
    
    
    // 设置当前模型对应的完整数据表名称
    protected $table = '__STOCK_BORROW__';

    static $status_str = ['-1'=>'待审核', '0'=>'未通过', '1'=>'操盘中', '2'=>'已结束','3'=>'已逾期'];

    protected function setAddIpAttr($value)
    {
    
    
        return get_client_ip(1);
    }

    // 自动写入时间戳
    protected $autoWriteTimestamp = true;

    //配资类型获取器
    public function getTypeAttr($value)
    {
    
    
        $status = ['5'=>'免息配资','1'=>'按天配资','2'=>'按周配资','3'=>'按月配资','4'=>'免费体验','6'=>'模拟操盘'];
        return $status[$value];
    }
    //配资类型设置器
    /**
    public function setTypeAttr()
    {
    return self::getData('type');
    }**/

    //关联子账户资金表定义
    public function member()
    {
    
    
        return $this->belongsTo('member');
    }

    /*
     * 获取证券类型列表
     * @param array $map 筛选条件
     * @param array $order 排序
     * @author 路人甲乙
     * @return mixed
     */
    public static function getList($map = [], $order = [])
    {
    
    
        $where=[];
        $where['b.status'] = input('status');//待审核
        $where['b.status']=='' && $where['b.status'] = -1;
        $data_list = self::view('stock_borrow b', true)
            ->view("member", 'mobile,name', 'member.id=b.member_id', 'left')
            ->view("stock_subaccount s",'sub_account','s.id=b.stock_subaccount_id','left')
            ->where($map)
            ->where($where)
            ->order($order)
            ->paginate()
            ->each( function($item, $key){
    
    
                $item->deposit_money = money_convert($item->deposit_money);
                $item->init_money = money_convert($item->init_money);
                $item->borrow_money = money_convert($item->borrow_money);
                $item->borrow_interest = money_convert($item->borrow_interest);
                $item->stock_money = money_convert($item->stock_money);
                if($item->getData('type')===3){
    
    $unit='个月';}elseif($item->getData('type')===2){
    
    $unit='周';}else{
    
    $unit='天';}
                $item->borrow_duration .= $unit;
            });
        return $data_list;
    }
    /*
     * 获取到期配资列表
     * @param array $map 筛选条件
     * @param array $order 排序
     * @author 路人甲乙
     * @return mixed
     */
    public static function getEnd($map = [], $order = [])
    {
    
    
        $data_list = self::view('stock_borrow b', true)
            ->view("member", 'mobile,name', 'member.id=b.member_id', 'left')
            ->view("stock_subaccount s",'sub_account','s.id=b.stock_subaccount_id','left')
            ->where($map)
            ->where('b.status','in',[1,3])
            ->where("b.end_time","<=",time()+32400)
            ->order($order)
            ->paginate()
            ->each( function($item, $key){
    
    
                $item->deposit_money = money_convert($item->deposit_money);
                $item->init_money = money_convert($item->init_money);
                $item->borrow_money = money_convert($item->borrow_money);
                $item->borrow_interest = money_convert($item->borrow_interest);
                $item->stock_money = money_convert($item->stock_money);
                if($item->getData('type')===3){
    
    $unit='个月';}elseif($item->getData('type')===2){
    
    $unit='周';}else{
    
    $unit='天';}
                $item->borrow_duration .= $unit;
            });
        return $data_list;
    }
 /*
    * 获取即将到期配资列表
    * @param array $map 筛选条件
    * @param array $order 排序
    * @author 路人甲乙
    * @return mixed
    */
    public static function getSoonExpire($map = [], $order = [])
    {
    
    
        $tis = 3*86400+time();
        $data_list = self::view('stock_borrow b', true)
            ->view("member", 'mobile,name', 'member.id=b.member_id', 'left')
            ->view("stock_subaccount s",'sub_account','s.id=b.stock_subaccount_id','left')
            ->where($map)
            ->where(['b.status'=>1])
            ->where('b.end_time','<=',$tis)
            ->order('b.id desc')
            ->paginate()
            ->each( function($item, $key){
    
    
                $item->deposit_money = money_convert($item->deposit_money);
                $item->init_money = money_convert($item->init_money);
                $item->borrow_money = money_convert($item->borrow_money);
                $item->borrow_interest = money_convert($item->borrow_interest);
                $item->stock_money = money_convert($item->stock_money);
                if($item->getData('type')===3){
    
    $unit='个月';}elseif($item->getData('type')===2){
    
    $unit='周';}else{
    
    $unit='天';}
                $item->borrow_duration .= $unit;
            });


        return $data_list;
    }

    /**
     * 获取待审核的配资记录信息
     * @param array $id 配资ID
     * @author 路人甲乙
     * @return mixed
     */
    public static function getEditBorrow($id=null)
    {
    
    
        $where['b.id'] = intval($id);
        $where['b.status'] = -1;//待审核
        $data_list = self::view('stock_borrow b', true)
            ->view("member m", 'mobile,name,pid', 'm.id=b.member_id', 'left')
            //->view("stock_subaccount sub", true, 'sub.id=b.stock_subaccount_id', 'left')
            ->where($where)
            ->find();

        if(!is_null($data_list)){
    
    
            if(isset($data_list['pid'])&&$data_list['pid']>1){
    
    
                $res=Db::view("admin_user a")
                    ->view('admin_role r','description','r.id=a.role')
                    ->where(["a.id"=>$data_list['pid']])
                    ->find();
                if($res){
    
    
                    $data_list['agent']=$res['description']." : ".$res['username'];
                }else{
    
    
                    $data_list['agent']="";
                }
            }

            $data_list['deposit_money'] = money_convert($data_list['deposit_money']);
            $data_list['init_money'] = money_convert($data_list['init_money']);
            $data_list['borrow_money'] = money_convert($data_list['borrow_money']);
            $data_list['borrow_interest'] = money_convert($data_list['borrow_interest']);
            $data_list['stock_money'] = money_convert($data_list['stock_money']);
        }
        return $data_list;
    }

    /**
     * 保存审核的配资记录信息
     * @param array $data 配资信息
     * @author 路人甲乙
     * @return mixed
     */
    public function saveBorrow($data)
    {
    
    
        $contents = trim($data['contents']);//审核信息
        //获取会员信息及会员资金信息
        $minfo_m =  Db::name('member')->where(['id'=>$data['member_id']])->where(['status'=>1])->find();
        //当前配资冻结金额
        $sumMoney = ($data['deposit_money'] + $data['borrow_interest'])*100;

        $record = new RecordModel;
        if($data['type']=="模拟操盘"){
    
    
            if($data['v_status']==0){
    
    //审核未通过
                $res = $this->where(['id'=>$data['id']])->update(['status'=>0]);
                if($res){
    
    
                    return ['status'=>1, 'msg'=>'审核未通过,处理成功'];
                }else{
    
    
                    return ['status'=>0, 'msg'=>'审核未通过,处理失败'];
                }
            }else{
    
    
                $subInfo = SubaccountModel::get($data['stock_subaccount_id']);
                if (empty($subInfo['sub_account']) || empty($subInfo['sub_pwd'])) {
    
    
                    return ['status'=>0, 'msg'=>'子账户帐号或密码不能为空!'];
                }
                $contents .= "  您的模拟操盘交易账号为:".$subInfo['sub_account'];
                $borrow = self::get($data['id']);
                $dataInfo['status'] = $data['v_status'];
                $dataInfo['stock_subaccount_id'] = $data['stock_subaccount_id'];
                if(getEndDay2('now', festival())===1&&time()<mktime(14,45)){
    
    
                    $dataInfo['verify_time'] = time();
                }else{
    
    
                    $dataInfo['verify_time'] = strtotime(getEndDay('now', 1,festival())." 09:00:00");
                }
                if(time()<mktime(14,45)){
    
    
                    $data['borrow_duration']=$data['borrow_duration']-1;
                }
                $start=date('Y-m-d',$dataInfo['verify_time']);
                $end_time=getEndDay($start, $data['borrow_duration'],festival());
                $dataInfo['end_time'] = strtotime($end_time." 14:45:00");
                $dataInfo['account_id'] =$subInfo['account_id'] ;
                $ret = $borrow->save($dataInfo);

                $subAccount = SubaccountModel::get($data['stock_subaccount_id']);
                $pram['uid'] = $data['member_id'];
                $pram['status'] = 1;
                $pram['user_type'] = 3;
                $mmRet  = $subAccount->save($pram);

                // 子账户风控
                $risk['loss_warn'] = $data['loss_warn'];
                $risk['loss_close'] = $data['loss_close'];
                $risk['position'] = $data['position'];
                $risk['prohibit_open'] = $data['prohibit_open'];
                $risk['prohibit_close'] = $data['prohibit_close'];
                //$risk['prohibit_back'] = $data['prohibit_back'];
                $risk['renewal'] = $data['renewal'];
                $risk['autoclose'] = $data['autoclose'];
                $risk['update_time'] = time();
                $risk_res = Db('stock_subaccount_risk')
                    ->where(['stock_subaccount_id'=>$data['stock_subaccount_id']])
                    ->update($risk);
                $subaccount_money['commission_scale'] = $data['commission_scale'];
                $subaccount_money['min_commission'] = $data['min_commission']*100;
                $subaccount_money['rate_scale'] = $data['rate_scale'];
                $subaccount_money['profit_share_scale'] = $data['profit_share_scale'];
                $subaccount_money['deposit_money'] = $data['deposit_money']*100;
                $subaccount_money['borrow_money'] = $data['borrow_money']*100;
                $subaccount_money['avail'] = $data['init_money']*100;
                $subaccount_money['update_time'] = time();
                $subaccount_money_res = Db('stock_subaccount_money')
                    ->where(['stock_subaccount_id'=>$data['stock_subaccount_id']])
                    ->update($subaccount_money);
            }
            if($mmRet !==false  && $ret !== false && $risk_res && $subaccount_money_res){
    
    
                //给用户发送短信和站内信(短信发送不可用,待处理)
                if ($minfo_m['mobile']) {
    
    
                    //$sms = send_sms($minfo_m['mobile'], '',$contents);//发送自定义短信
                }
                //添加站内信信息
                $MemberMessageModel = new MemberMessageModel();
                $MemberMessageModel->addInnerMsg($data['member_id'],'模拟操盘审核通知',$contents);//站内信
                return ['status'=>1, 'msg'=>'审核通过,处理成功'];
            }else{
    
    
                return ['status'=>0, 'msg'=>'审核通过,处理失败'];
            }
        }

        if($data['v_status']==0){
    
    //审核未通过
            // 审核不通过,资金解冻、返还利息
            //更新资金表
            Db::startTrans();
            $minfo=Db::name("money")->where(['mid'=>$data['member_id']])->lock(true)->find();
            $mmoney['freeze'] = $minfo['freeze'] - $sumMoney;//资金解冻,减掉冻结中的资金
            $mmoney['account'] = $minfo['account'] + $sumMoney;//资金解冻,增加会员资金账户余额
            $money_res = Db('money')->where(['mid'=>$data['member_id']])->update($mmoney);
            $record_res = $record->saveData($data['member_id'], $sumMoney, $mmoney['account'], 21, '配资审核未通过,解冻保证金到余额');
            $res = $this->where(['id'=>$data['id']])->update(['status'=>0]);
            if($res && $money_res && $record_res){
    
    
                Db::commit();
                return ['status'=>2, 'msg'=>'审核未通过,处理成功'];
            }else{
    
    
                Db::rollback();
                return ['status'=>0, 'msg'=>'审核未通过,处理失败'];
            }
        }else{
    
    //审核通过
            //根据子账户ID获取子账户信息
            $subInfo = SubaccountModel::get($data['stock_subaccount_id']);
            if (empty($subInfo['sub_account']) || empty($subInfo['sub_pwd'])) {
    
    
                return ['status'=>0, 'msg'=>'子账户帐号或密码不能为空!'];
            }
            $contents .= "  您的股票交易账号为:".$subInfo['sub_account']." 密码:".$subInfo['sub_pwd'];
            Db::startTrans();
            $minfo=Db::name("money")->where(['mid'=>$data['member_id']])->lock(true)->find();
            //更新资金表
            $mmoney['freeze'] = $minfo['freeze'] - $sumMoney;//资金解冻,减掉冻结中的资金
            $mmoney['operate_account'] = $minfo['operate_account'] + $data['init_money']*100;//配资成功,增加该配资的初始操盘资金
            $mmoney['bond_account'] = $minfo['bond_account'] + $data['deposit_money'] * 100;
            // 启动事务
            //还息明细表
            $stockDetail = Db::name('stock_detail');
            $insert_res=true;
            if ($data['type'] == "按月配资"&&$data['borrow_duration']>1) {
    
    //按月并且大于一个月
                $data['total'] = $data['borrow_duration'];
                //插入还息明细表
                for ($i = 1; $i <= $data['borrow_duration']; $i++) {
    
    
                    $detailData['status'] = 0;
                    $detailData['borrow_id'] = $data['id'];
                    $detailData['mid'] = $data['member_id'];
                    $detailData['interest'] = $data['borrow_interest'];
                    $detailData['receive_interest'] = 0;
                    $detailData['sort_order'] = $i;
                    $detailData['total'] = $data['borrow_duration'];
                    $detailData['deadline'] = $data['borrow_duration'] == 1 ? time() : strtotime("+{
      
      $i} Month");
                    $detailData['repayment_time'] = 0;
                    $insert_res=$stockDetail->insert($detailData);
                    if(!$insert_res){
    
    
                        break;
                    }
                }
                //更新明细表第一个月的信息
                $detailInfo['status'] = 1;
                $detailInfo['receive_interest'] = $data['borrow_interest'];
                $detailInfo['sort_order'] = 1;
                $detailInfo['repayment_time'] = time();
                //where条件
                $whereDetail['borrow_id'] = $data['id'];
                $whereDetail['mid'] = $data['member_id'];
                $whereDetail['sort_order'] = 1;
                $stock_res=$stockDetail->where($whereDetail)->update($detailInfo);
            }else{
    
    
                $stock_res=true;
            }
            $rebate=true;
            if ($data['type'] == "按月配资"||$data['type'] == "按天配资") {
    
    
                //推荐人返利 只有按天、按月配资推荐人才会返利
//                $investor = $data['member_id'];
//                $recommendor = Db::name('member_invitation_relation')->where("invitation_mid = {$investor}")->value('mid');
//                if (!is_null($recommendor)) {//如果存在推荐人,则进行推荐人返佣计算
//                        $rebate = $this->sendRebate($recommendor, $data['id'], $memberInfo);
//                }
            }

            $subResult = Db('money')->where(['mid'=>$data['member_id']])->update($mmoney);
            // 更新资金日志表信息
            $mmLogRet = $record->saveData($data['member_id'], $sumMoney, $minfo['account'], 22, '配资审核通过,解冻保证金到配资账户');
            //更新配资表信息
            $borrow = self::get($data['id']);
            $dataInfo['status'] = $data['v_status'];
            $dataInfo['stock_subaccount_id'] = $data['stock_subaccount_id'];
            switch ($data['type']){
    
    
                case "按月配资":
                    $dataInfo['verify_time']=time();
                    $duration=$data['borrow_duration']." month";
                    if(time()<mktime(14,45)){
    
    
                        $end_time=date('Y-m-d', strtotime("+{
      
      $duration}")-86400);
                    }else{
    
    
                        $end_time=date('Y-m-d', strtotime("+{
      
      $duration}"));
                    }
                    break;
                case "按周配资":
                    $dataInfo['verify_time']=time();
                    $duration=$data['borrow_duration']." week";
                    if(time()<mktime(14,45)){
    
    
                        $end_time=date('Y-m-d', strtotime("+{
      
      $duration}")-86400);
                    }else{
    
    
                        $end_time=date('Y-m-d', strtotime("+{
      
      $duration}"));
                    }

                    break;
                case "按天配资":
                    if(getEndDay2('now', festival())===1&&time()<mktime(14,45)){
    
    
                        $dataInfo['verify_time'] = time();
                    }else{
    
    
                        $dataInfo['verify_time'] = strtotime(getEndDay('now', 1,festival())." 09:00:00");
                    }
                    $start=date('Y-m-d',$dataInfo['verify_time']);
                    $data['borrow_duration']=$data['borrow_duration']-1;
                    $end_time=getEndDay($start, $data['borrow_duration'],festival());
                    break;
                default:
                    if(getEndDay2('now', festival())===1&&time()<mktime(14,45)){
    
    
                        $dataInfo['verify_time'] = time();
                    }else{
    
    
                        $dataInfo['verify_time'] = strtotime(getEndDay('now', 1,festival())." 09:00:00");
                    }
                    $start=date('Y-m-d',$dataInfo['verify_time']);
                    $data['borrow_duration']=$data['borrow_duration']-1;
                    $end_time=getEndDay($start, $data['borrow_duration'],festival());
                    break;
            }
            $dataInfo['end_time'] = strtotime($end_time." 14:45:00");
            //$account_info=account::getBroker($subInfo['account_id']);
            $dataInfo['account_id'] =$subInfo['account_id'] ;
            $ret = $borrow->save($dataInfo);
            $subAccount = SubaccountModel::get($data['stock_subaccount_id']);
            if(empty($subAccount['uid'])){
    
    
                $pram['uid'] = $data['member_id'];
                $pram['status'] = 1;
                $mmRet  = $subAccount->save($pram);
            }else{
    
    
                $mmRet=false;
            }
            // 子账户风控
            $risk['loss_warn'] = $data['loss_warn'];
            $risk['loss_close'] = $data['loss_close'];
            $risk['position'] = $data['position'];
            $risk['prohibit_open'] = $data['prohibit_open'];
            $risk['prohibit_close'] = $data['prohibit_close'];
            //$risk['prohibit_back'] = $data['prohibit_back'];
            $risk['renewal'] = $data['renewal'];
            $risk['autoclose'] = $data['autoclose'];
            $risk['update_time'] = time();
            $risk_res = Db('stock_subaccount_risk')
                ->where(['stock_subaccount_id'=>$data['stock_subaccount_id']])
                ->update($risk);
            $subaccount_money['commission_scale'] = $data['commission_scale'];
            $subaccount_money['min_commission'] = $data['min_commission']*100;
            $subaccount_money['rate_scale'] = $data['rate_scale'];
            $subaccount_money['profit_share_scale'] = $data['profit_share_scale'];
            $subaccount_money['deposit_money'] = $data['deposit_money']*100;
            $subaccount_money['borrow_money'] = $data['borrow_money']*100;
            $subaccount_money['avail'] = $data['init_money']*100;
            $subaccount_money['update_time'] = time();
            $subaccount_money_res = Db('stock_subaccount_money')
                ->where(['stock_subaccount_id'=>$data['stock_subaccount_id']])
                ->update($subaccount_money);
            if($mmRet&&$mmLogRet!== false && $ret&& $subResult&&$risk_res&&$subaccount_money_res &&$stock_res&&$rebate&&$insert_res){
    
    


                //添加站内信信息
                $MemberMessageModel = new MemberMessageModel();
                $MemberMessageModel->addInnerMsg($data['member_id'],'配资审核通知',$contents);//站内信
                Db::commit();
                return ['status'=>1, 'msg'=>'审核通过,处理成功'];
            }else{
    
    
                Db::rollback();
                return ['status'=>0, 'msg'=>'审核通过,处理失败'];
            }
        }
    }
 /*
     * 已有申请验证
     */
    public function onecheck($mid){
    
    
        return Db::name('stock_borrow')->where(['member_id'=>$mid])->where(['status'=>"-1"])->find();
    }
    /*
  * 已有申请验证
  */
    public function onechecktype($mid){
    
    
        $map = "status !=0";
        return Db::name('stock_borrow')->where(['member_id'=>$mid])->where($map)->find();
    }
    /*
     * 会员发起配资申请存库
     * @return [type] [description]
     * @author 张继立 <[email protected]>
     */
    public  function createStock($data=[])
    {
    
    
        $record = new RecordModel;
        $interest = self::interest($data['type'], $data['rate'], $data['borrow_money'], $data['borrow_duration']);
        $data['borrow_interest'] = $interest;
        $need_money = bcadd($interest, $data['deposit_money']);
        Db::startTrans();
        $member_money = Db('money')->where(['mid'=>$data['member_id']])->lock(true)->find();
        if($member_money['account'] < $need_money){
    
    
            return ['status'=>0, 'msg'=>'资金不足请充值'];
        }
        $account = $member_money['account'] - $need_money;
        $freeze = $member_money['freeze'] + $need_money;


        try{
    
    
            $money_res = Db('money')->where(['mid'=>$data['member_id']])->update(['account'=>$account, 'freeze'=>$freeze]);
            $record_res = $record->saveData($data['member_id'], -abs($need_money), $account, 33, '申请配资:'.$data['order_id']);
            // 验证
            $result =  $this->validate('Borrow.create')->save($data);
            if($result === false){
    
    
                Db::rollback();
                return ['status'=>'0', 'msg'=>$this->getError()];
            }
            if($money_res !== null && $result && $record_res){
    
    
                Db::commit();
                return ['status'=>'1', 'msg'=>'提交成功,已通知管理员审核'];
            }else{
    
    
                Db::rollback();
                return ['status'=>'0', 'msg'=>'系统异常'];
            }
        }catch(\Exception $e){
    
    
            Db::rollback();
            return ['status'=>'0', 'msg'=>$e->getMessage()];
        }
    }

    /*
     * 计算利息
     * @param  intval $type         配资类型
     * @param  float $rate         手续费费率
     * @param  intval $borrow_money 配资金额
     * @param  intval $duration     融资期数
     * @return int   利息
     * @author 张继立 <[email protected]>
     */
    public static function interest($type, $rate, $borrow_money, $duration)
    {
    
    
        $interest = 0;
        $rate = floatval($rate/100);
        switch ($type) {
    
    
            case '1': // 按天配资
                $interest = bcmul($borrow_money, $rate)*$duration;
                break;
            case '2': //按周配资
                $interest = bcmul($borrow_money, $rate)*$duration;
                break;
            case '3': // 按月配资
                $interest = bcmul($borrow_money, $rate)*1;
                break;
            case '4': //免费体验
                break;
            case '5': //免息配资
                break;
            case '6': //模拟操盘
                break;
            default:
                break;
        }
        return intval($interest);
    }

    public static function getBorrow($mid, $limit='', $map=[], $order='id desc')
    {
    
    
        $map['member_id'] = $mid;
        $data_list = self::view('stock_borrow sb', true)
            ->view('stock_subaccount_risk ssr', 'loss_warn, loss_close,renewal', 'sb.stock_subaccount_id=ssr.stock_subaccount_id', 'left')
            ->view('stock_subaccount_money ssm', 'avail,return_money, return_rate', 'sb.stock_subaccount_id=ssm.stock_subaccount_id', 'left')
            ->where($map)
            ->order($order)
            //->limit($limit)
            ->paginate($limit)
            ->each( function($item, $key){
    
    
                $item->loss_warn_money = $item->borrow_money+$item->loss_warn * $item->deposit_money /100;
                $item->loss_close_money = $item->borrow_money+$item->loss_close * $item->deposit_money /100;
                $item->status_text = self::$status_str[$item->status];

            });
        return $data_list;
    }
    /*
     * 返回带收益的borrow表信息
     */
    public static function getBorrowinfo($mid, $limit='', $map=[], $order='id desc')
    {
    
    

        $data_list = self::view('stock_borrow sb', "type as types,*")
            ->view("stock_subaccount subaccount", "sub_account", "sb.stock_subaccount_id=subaccount.id", "left")
            ->view('stock_subaccount_risk ssr', 'loss_warn, loss_close,renewal', 'sb.stock_subaccount_id=ssr.stock_subaccount_id', 'left')
            ->view('stock_subaccount_money ssm', 'avail,return_money, return_rate', 'sb.stock_subaccount_id=ssm.stock_subaccount_id', 'left')
            ->where($map)
            ->where(['member_id'=>$mid])
            ->where("sb.type","<>",6)
            ->order($order)
            ->paginate($limit, false, ['query' => request()->param(),])
            ->each( function($item, $key){
    
    
                $item->loss_warn_money = $item->borrow_money+$item->loss_warn * $item->deposit_money /100;
                $item->loss_close_money = $item->borrow_money+$item->loss_close * $item->deposit_money /100;
                $item->return_money = $item->return_money/100;
                if($item->end_time<=time() && $item->status!=2 && $item->end_time > 0){
    
    
                    $item->status=3;
                }

                if($item->types==3){
    
    
                    if(($item->verify_time+2592000)>time()){
    
    
                        $item->management ='首月管理费';
                    }else{
    
    
                        $item->management ='配资管理费(月)';
                    }
                    $item->imgsType= 'yuepeizi.png';
                }elseif($item->types==5){
    
    
                    $item->management ='配资管理费(免)';
                    $item->imgsType= 'mianxipeizi.png';
                }elseif($item->types==1){
    
    
                    $item->management ='配资管理费(天)';
                    $item->imgsType= 'tianpeizi.png';
                }elseif($item->types==2){
    
    
                    $item->management ='配资管理费(周)';
                    $item->imgsType= 'zhoupeizi.png';
                }elseif($item->types==4){
    
    
                    $item->management ='配资管理费(体)';
                    $item->imgsType= 'tiyan.png';
                }
                $item->status_text = self::$status_str[$item->status];
                $res=Db::name('stock_position')
                    ->where(['sub_id'=>$item->stock_subaccount_id])
                    ->where(['buying'=>0])
                    ->select();
                $sum=0;
                $item->btn="去交易";
                if(!empty($res)){
    
    
                    foreach ($res as $k=>$v){
    
    
                        $lis=z_market($v['gupiao_code']);
                        if(!isset($lis['current_price'])){
    
    
                            $lis['current_price']=0;
                        }
                        $sum+=$lis['current_price']*$v['stock_count'];
                    }
                    $item->btn="查看实盘交易";
                }
                $item->sum_money=$sum;
            });
        return $data_list;
    }
    /*
     * 返回结束的模拟操盘信息
     */
    public static function get_end_mock($map,$order)
    {
    
    
        $data_list = self::view('stock_borrow sb', true)
            ->view("member m",'mobile,name','m.id=sb.member_id')
            ->view("stock_subaccount subaccount", "sub_account", "sb.stock_subaccount_id=subaccount.id", "left")
            ->view('stock_subaccount_risk ssr', 'loss_warn, loss_close,renewal', 'sb.stock_subaccount_id=ssr.stock_subaccount_id', 'left')
            ->view('stock_subaccount_money ssm', 'avail,return_money, return_rate', 'sb.stock_subaccount_id=ssm.stock_subaccount_id', 'left')
            ->where($map)
            ->order($order)
            ->where("sb.type","=",6)
            ->paginate()
            ->each( function($item, $key){
    
    
                $item->loss_warn_money = $item->borrow_money+$item->loss_warn * $item->deposit_money /100;
                $item->loss_close_money = $item->borrow_money+$item->loss_close * $item->deposit_money /100;
                $item->return_money = $item->return_money/100;
                $item->status_text = self::$status_str[$item->status];
            });
        return $data_list;
    }
    /*
     * 返回带收益的模拟操盘信息
     */
    public static function getmock($mid)
    {
    
    
        $map['member_id'] = $mid;
        $data_list = self::view('stock_borrow sb', true)
            ->view("stock_subaccount subaccount", "sub_account", "sb.stock_subaccount_id=subaccount.id", "left")
            ->view('stock_subaccount_risk ssr', 'loss_warn, loss_close,renewal', 'sb.stock_subaccount_id=ssr.stock_subaccount_id', 'left')
            ->view('stock_subaccount_money ssm', 'avail,return_money, return_rate', 'sb.stock_subaccount_id=ssm.stock_subaccount_id', 'left')
            ->where($map)
            ->where("type","=",6)
            ->paginate()
            ->each( function($item, $key){
    
    
                $item->loss_warn_money = $item->borrow_money+$item->loss_warn * $item->deposit_money /100;
                $item->loss_close_money = $item->borrow_money+$item->loss_close * $item->deposit_money /100;
                $item->return_money = $item->return_money/100;
                if($item->end_time<=time() && $item->status!=2 && $item->end_time > 0){
    
    
                    $item->status=3;
                };
                $item->status_text = self::$status_str[$item->status];
                $res=Db::name('stock_position')
                    ->where(['sub_id'=>$item->stock_subaccount_id])
                    ->where(['buying'=>0])
                    ->select();
                $sum=0;
                $item->btn="去交易";
                if(!empty($res)){
    
    
                    foreach ($res as $k=>$v){
    
    
                        $lis=z_market($v['gupiao_code']);
                        if(!isset($lis['current_price'])){
    
    
                            $lis['current_price']=0;
                        }
                        $sum+=$lis['current_price']*$v['stock_count'];
                    }
                    $item->btn="查看实盘交易";
                }
                $item->sum_money=$sum;
            });
        return $data_list;
    }
    /*
     * 判断是否为A股股票
     */
    public static function market_type($code){
    
    
        switch (substr($code,0,1)){
    
    
            case '0':return 1;break;
            case '3':return 1;break;
            case '6':return 2;break;
            default: return 5;break;//5、出错
        }
    }

    /**
     * 根据配资ID获取配资记录详情信息
     * @param array $id 配资ID
     * @author 路人甲乙
     * @return mixed
     */
    public static function getBorrowDetail($id=null)
    {
    
    
        $where['b.id'] = intval($id);
        $data_list = self::view('stock_borrow b', true)
            ->view("member m", 'mobile,name', 'm.id=b.member_id', 'left')
            ->view('stock_subaccount_risk ssr', 'loss_warn, loss_close,renewal', 'b.stock_subaccount_id=ssr.stock_subaccount_id', 'left')
            ->view('stock_subaccount_money ssm', 'avail,return_money,available_amount,return_rate', 'b.stock_subaccount_id=ssm.stock_subaccount_id', 'left')
            ->view('stock_subaccount ss', 'sub_account,sub_pwd,agent_id', 'ss.id=b.stock_subaccount_id', 'left')
            ->where($where)
            ->find();
        if($data_list['type']=='按周配资'){
    
    

            $data_list['units'] = '周';

        }elseif($data_list['type']=='按天配资'){
    
    

            $data_list['units'] = '天';

        }elseif($data_list['type']=='按月配资'){
    
    

            $data_list['units'] = '月';

        }elseif($data_list['type']=='免费体验'){
    
    

            $data_list['units'] = '体';

        }elseif($data_list['type']=='免息配资'){
    
    

            $data_list['units'] = '免';

        }
        if(!is_null($data_list)){
    
    
            if($data_list['loss_warn']===null){
    
    
                $list = self::view('stock_borrow b', true)->where($where)->find();
                $data_list['loss_warn']=$list['loss_warn'];
                $data_list['loss_close']=$list['loss_close'];
            }
            $data_list['loss_warn_money'] = $data_list['borrow_money']+$data_list['loss_warn'] * $data_list['deposit_money'] /100;
            $data_list['loss_close_money'] = $data_list['borrow_money']+$data_list['loss_close'] * $data_list['deposit_money'] /100;

            $data_list['return_money'] = money_convert($data_list['return_money']);
            if($data_list['end_time']<=time()&&$data_list['status']==1&&$data_list['end_time'] > 0){
    
    
                $data_list['status']=3;
            }
            $data_list['status'] = self::$status_str[$data_list['status']];
        }

        return $data_list;
    }
    /*
     * 判断用户是否有未处理的申请
     */
    public static function checkApply($borrow_id,$uid,$sub_id){
    
    
        $addmoney = Db::name("stock_addmoney");
        $moneyres = $addmoney->where("status=0 and borrow_id={
      
      $borrow_id} and uid={
      
      $uid}")->find();
        if (!empty($moneyres)) {
    
    
            return ['status'=>0,'msg'=>'该用户还有未审核的增加保证金申请,请处理!'];
        }
        $renewal = Db::name("stock_renewal");
        $renewalres = $renewal->where("type=1 and status=0 and borrow_id={
      
      $borrow_id} and uid={
      
      $uid}")->find();
        if (!empty($renewalres)) {
    
    
            return ['status'=>0,'msg'=>'该用户有未审核的延期申请,请处理!'];
        }
        $addfinancing = Db::name("stock_addfinancing");
        $addfinancingres = $addfinancing->where("status=0 and borrow_id={
      
      $borrow_id} and uid={
      
      $uid}")->find();
        if (!empty($addfinancingres)) {
    
    
            return  ['status'=>0,'msg'=>'该用户有未审核的扩大配资申请,请处理!'];
        }
        $drawprofit = Db::name("stock_drawprofit");
        $drawprofits = $drawprofit->where("status=0 and borrow_id={
      
      $borrow_id} and uid={
      
      $uid}")->find();
        if (!empty($drawprofits)) {
    
    
            return  ['status'=>0,'msg'=>'该用户有未审核的提取盈利申请,请处理'];
        }
        $stockposition = Db::name("stock_position");
        $stock = $stockposition->where("sub_id={
      
      $sub_id}")->where(['buying'=>0])->find();
        if (!empty($stock)) {
    
    
            return  ['status'=>0,'msg'=>'该用户持有未平仓的股票,请处理'];
        }
        return ['status'=>1,'msg'=>'检查完毕可以清算'];
    }
    /*
     * 卖出
     * $id 子账户id
     * $code 股票代码
     * $count 卖出数量
     * $sys 是否系统卖出标志 0、非系统卖出 1、系统卖出
     */
    public function savesell($id,$code,$count,$sys=0,$price=null,$model=2){
    
    

        $stockinfo=z_market($code);
        if(intval($stockinfo["yesterday_price"])==0){
    
    
            return ['status'=>0, 'message'=>'请检查该股是否退市'];
        }
        if(intval($stockinfo["open_price"])==0){
    
    
            return ['status'=>0, 'message'=>'该股今日还没开盘'];
        }
        //当股票跌停时买一至买五价格为空
        if(intval($stockinfo["buy_one_price"])<=0){
    
    
            return ['status'=>0, 'message'=>'当前买盘不足,无法即时成交!'];
        }

        $trade_money = 0;
//        if(!empty($price)&&$model==1&&$price<$stockinfo['buy_one_price']){
    
    
//            $model=2;
//        }
        if(!empty($price)&&$model==1){
    
    
            $trade_money=$count*$price;
        }elseif($model==2) {
    
    
            $price = 0;
            $arr[1] = $stockinfo["buy_one_amount"] * 100;
            $arr[2] = $stockinfo["buy_two_amount"] * 100;
            $arr[3] = $stockinfo["buy_three_amount"] * 100;
            $arr[4] = $stockinfo["buy_four_amount"] * 100;
            $arr[5] = $stockinfo["buy_five_amount"] * 100;
            $p_arr[1] = $stockinfo["buy_one_price"];
            $p_arr[2] = $stockinfo["buy_two_price"];
            $p_arr[3] = $stockinfo["buy_three_price"];
            $p_arr[4] = $stockinfo["buy_four_price"];
            $p_arr[5] = $stockinfo["buy_five_price"];
            $tmd = 0;
            foreach ($arr as $key => $v) {
    
    
                $tmd = $tmd + $v;
                if ($tmd >= $count) {
    
    
                    $sum_money = 0;
                    $sum_count = $count;
                    for ($i = 1; $i < $key; $i++) {
    
    
                        if($p_arr[$i]>=0.01){
    
    
                            $sum_money += $arr[$i] * $p_arr[$i];
                            $sum_count -= $arr[$i];
                        }
                    }
                    $trade_money = $sum_money + $sum_count * $p_arr[$key];
                    $price = round($trade_money / $count,2);
                    $trade_money=$price*$count;
                    break;
                }
                if($sys==1&&$key == 5){
    
    
                    $price = $p_arr[1];
                    $trade_money=$price*$count;
                    break;
                }
                if ($key == 5) return ['status' => 0, 'message' => '买量不足,无法成交'];
            }
        }else{
    
    
            return ['status' => 0, 'message' => '参数错误'];
        }
//        if ($model==1&&abs($stockinfo["yesterday_price"] - $price) / $stockinfo["yesterday_price"] >= 0.08) {
    
    
//            return ['status' => 0, 'message' => '委托价格超过风控限制,禁止购买!'];
//        }
        $etype=$this->market_type($code);
        if($etype==5){
    
    return ['status'=>0, 'message'=>'请检查卖出的股票代码是否错误'];}
        $submodel=new StockSubAccount();
        $res=$submodel->get_account_by_id($id);
        if(isset($res['id'])){
    
    
            $sub_id = $res['id'];
        }else{
    
    
            return ['status'=>0, 'message'=>'不存在的子账号'];
        }
        $bs_res=Db::name('stock_borrow')->where(['stock_subaccount_id'=>$sub_id])->find();
        if(empty($bs_res)){
    
    
            return ['status'=>0, 'message'=>'没有对应的配资'];
        }
//        if($bs_res['end_time']<=time()){
    
    
//            return ['status'=>0, 'msg'=>'配资已经到期,不允许卖出。'];
//        }
        $moneymodel=new SubAccountMoneyModel();
        $moneyinfo=$moneymodel->get_account_money($id);
        $broker=$submodel->get_broker($res['account_id']);
        $commission=round($trade_money*$moneyinfo['commission_scale']/10000,2);//佣金
        if($commission<$moneyinfo['min_commission']/100){
    
    $commission=$moneyinfo['min_commission']/100;}
        $stamp=round($trade_money*self::config('stamp_duty')/1000,2);//印花税
        if($etype==2){
    
    
            $Transfer = round($trade_money / 50000,2);//过户费,只有上海交易所收
            if($Transfer<self::config('transfer_fee')){
    
    $Transfer=self::config('transfer_fee');}
        }else{
    
    
            $Transfer=0;
        }
        $position = new Position();
        $position_res = $position->get_code_position($sub_id, $code);
        if (empty($position_res)) {
    
    
            return ['status'=>0, 'message'=>'不存在的股票持仓'];
        }
        if ($position_res['canbuy_count'] < $count) {
    
    
            return ['status'=>0, 'message'=>'可卖股票数量不足!!!'];
        }
        if($count<0){
    
    
            return ['status'=>0, 'message'=>'卖出数量出错!'];
        }
        if($count%100>0){
    
    
            if($position_res['canbuy_count']!=$count){
    
    
                return ['status'=>0, 'message'=>'目前不允许拆零出售,如有零散股,请一次性卖清。'];
            }else{
    
    //为将来扩展处理分红配股预留
                //return ['status'=>0, 'message'=>'目前只允许按手数出售'];
            }
        }
        $risk = new StockSubAccountRisk();
        $risk_res = $risk->get_risk($sub_id);
        if ($risk_res['prohibit_close'] == 0 &&$sys==0) {
    
    
            return ['status' => 0, 'message' => '您的子账户被禁止平仓,请联系管理员咨询原因。'];
        }
        $Delivery=new Delivery();
        $dv_res=$Delivery->get_code_delivery_order($sub_id,$code);
        $div_info=Db::name("stock_bonus_dividend")->where(['sub_id'=>$sub_id])
            ->where(['code'=>$code])
            ->find();
        if(!empty($dv_res)){
    
    
            $dv_num=0;
            $deal_date=mktime(0,0);
            foreach ($dv_res as $kk=>$vv){
    
    
                if($vv['business_name']=='证券买入'){
    
    
                    if($vv['deal_date']>$deal_date){
    
    continue;}
                    $dv_num+=$vv['volume'];
                }
                if($vv['business_name']=='证券卖出'){
    
    $dv_num-=$vv['volume'];}
            }
            if(($dv_num+$div_info['stock_count'])<$count){
    
    
                return ['status'=>0, 'message'=>'可卖股票数量不足!!'];
            }else{
    
    
                $amount=$dv_num-$count;
            }
        }else{
    
    
            return ['status'=>0, 'message'=>'可卖股票数量不足!'];
        }
        if($broker['broker']===-1){
    
    
            $type=2;//模拟账户回款
        }else{
    
    
            $type=4;//实盘账户
        }
        $effect_money=$trade_money-$Transfer-$stamp-$commission;
        Db::startTrans();
        if($model==1){
    
    
            $type=4;//如果是限价交易走实盘交易模式-先冻结卖出资金等交易确认后解冻
            $ret=$moneymodel->up_moneylog($sub_id,$effect_money*100,$type);
        }else{
    
    
            $return_money=$trade_money-$position_res['ck_price']*$count-$Transfer-$stamp-$commission;
            $ret=$moneymodel->up_moneylog($sub_id,$effect_money*100,$type,$return_money*100);
            //扣除利息税开始
            $div_info=Db::name("stock_bonus_dividend")->where(['sub_id'=>$sub_id])
                ->where(['code'=>$code])
                ->find();
            if(!empty($div_info)&&$div_info['ex_count']<$div_info['stock_count']){
    
    
                $tmd=mktime(0,0,0)-$div_info['trade_time'];
                //默认20%利息税
                $rate=0.2;
                //30天内收取10%
                if($tmd>86400*30){
    
    
                    $rate=0.1;
                }
                if($tmd<=86400*365){
    
    
                    $ex_cha=$div_info['stock_count']- $div_info['ex_count'];
                    $tmd_count=$ex_cha<=$count?$ex_cha:$count;
                    $feen=round($tmd_count*$div_info['bonus']/10*$rate+$tmd_count*$div_info['song']/10*$price*$rate,2);
                    if($feen>0){
    
    
                        $div_res=$moneymodel->up_moneylog($sub_id,$feen*100,15,0,0,$code);
                        if($div_res){
    
    
                            $div_data['ex_count']=$div_info['ex_count']+$tmd_count;
                            Db::name("stock_bonus_dividend")
                                ->where(['id'=>$div_info['id']])
                                ->update($div_data);
                        }
                    }else{
    
    
                        //如果$fee=0说明是转增,没有分红和送股,不用扣利息税
                    }
                }else{
    
    
                    //持有超一年,不用扣利息税
                }
            }
            //扣除利息税结束
        }
        if(!$ret){
    
    
            Db::rollback();
            return ['status'=>0, 'message'=>"交易失败"];
        }
        $lid=$broker['lid'];
        $user=$broker['user'];
        $soure=$broker['stockjobber'];
        $Trust_no=mt_rand(101010, 999999).substr(time(),1);
        $Trust=new Trust();
        $Trust_res=$Trust->sell_m_trust($stockinfo,$count,$price,$sub_id,$lid,$user,$soure,$Trust_no,$broker,$model);
        if(!$Trust_res){
    
    
            Db::rollback();
            return ['status'=>0, 'message'=>"交易失败"];
        }
        $pos_res=$position->sell_m_position($stockinfo,$count,$price,$sub_id,$model,$Trust_no,$commission,$Transfer,$stamp);
        if(!$pos_res){
    
    
            Db::rollback();
            return ['status'=>0, 'message'=>"交易失败"];
        }
        $deal_stack=new Deal_stock();
        $deal_res=$deal_stack->sell_m_deal_stock($stockinfo,$count,$price,$sub_id,$lid,$user,$soure,$Trust_no,$model);
        if(!$deal_res){
    
    
            Db::rollback();
            return ['status'=>0, 'message'=>"交易失败"];
        }

        $avail=$moneyinfo["avail"]/100+$effect_money;
        $pos_res=$Delivery->sell_m_delivery_order($stockinfo,$count,$price,$sub_id,$lid,$user,$soure,$commission,$Transfer,$Trust_no,$stamp,$avail,$amount,$model);
        if(!$pos_res){
    
    
            Db::rollback();
            return ['status'=>0, 'message'=>"交易失败"];
        }
        if($broker['broker']!=-1){
    
    
            $p_data=[];
            if(self::config('web_real_api')==1) {
    
    
                $p_data=gs('queryTradeData',[$broker['id'],2]);
            }
            if(self::config('web_real_api')==2){
    
    
                $p_data =Grid::grid_category_stock($broker['id']);
            }

            if(!$p_data){
    
    
                Db::rollback();
                return ['status'=>0, 'message'=>'交易接口错误,无法成交'];
            }
            unset($p_data[0]);
            $p_res=null;
            foreach ($p_data as $k=>$v){
    
    
                if($v[0]==$code){
    
    
                    $p_res=$p_data[$k];
                    break;
                }
            }
            if(empty($p_res)){
    
    
                Db::rollback();
                return ['status'=>0, 'message'=>'不存在的股票持仓!'];
            }
            if($p_res[4]<$count){
    
    
                Db::rollback();
                return ['status'=>0, 'message'=>'可卖股票数量不足!'];
            }
            $residue=$count%100;
            if($residue>0){
    
    
                $count=$count-$residue;
            }
            $trade_id=$broker['id'];
            if(self::config('web_real_api')==1) {
    
    
                $otype=2;//1买入 2卖出
                if($model==1){
    
    
                    $ptype = 1;//1、限价委托
                }else{
    
    
                    $ptype = 5;//5市价委托(上海五档即成剩撤/ 深圳五档即成剩撤)
                }
                $data = gs('commitOrder', [$trade_id, $code, $count, $etype, $otype, $ptype, $price]);
            }
            if(self::config('web_real_api')==2){
    
    
                $otype=1;//0->买入 1->卖出 2->融资买入 3->融券卖出 4->买券还券 5->卖券还款 6->现券还券 7->担保品买入 8->担保品卖出
                if($model==1){
    
    
                    $ptype = 0;//0、限价委托
                }else{
    
    
                    $ptype = 4;//0->上海限价委托 深圳限价委托1->市价委托(深圳对方最优价格)2->市价委托(深圳本方最优价格)3->市价委托(深圳即时成交剩余撤销)
                    //4->市价委托(上海五档即成剩撤 深圳五档即成剩撤)5->市价委托(深圳全额成交或撤销)6->市价委托(上海五档即成转限价)
                }
                $data=Grid::grid_order($otype,$ptype,$code,$price,$count,$trade_id);
            }

            if(isset($data['error'])){
    
    
                Db::rollback();
                return ['status'=>0, 'message'=>$data['error']];
            }
            if(isset($data['ErrInfo'])){
    
    
                Db::rollback();
                return ['status'=>0, 'message'=>$data['ErrInfo']];
            }
        }
        Db::commit();
        return ['status'=>1, 'message'=>'卖出委托已提交'];
    }
  

Guess you like

Origin blog.csdn.net/withkai44/article/details/131387162