find($id);
        // if ($data['mid'] && $data['mid'] > 0) {
        //     $user = Dever::db('active/user')->find(array('mid'=>$data['mid']));
        //     if ($user && $user['id']) {
        //         $uid = $user['id'];
        //     }
        // } else {
        //     $uid = $data['uid'];
        // }
        $this->common($data,1);
  		return 'reload';
	}
    public function insertInfoRefund ($id,$name,$data)
    {
        $num = Dever::param('num',$data);
        $order_id = Dever::param('order_id',$data);
        $data = Dever::db('active/order')->find($order_id);
        if($num > $data['num']) {
            Dever::alert('退款数量大于购买数量');
        }
        $info = Dever::db('active/info_refund')->state(array('order_id'=>$order_id,'status'=>2));
        $count = $data['num'] - count($info);
        if ($num > $count) {
            Dever::alert('退款数量大于购买数量');
        }
    }
    public function updateInfoRefund ($id,$name,$data)
    {
        $num = Dever::param('num',$data);
        $order_id = Dever::param('order_id',$data);
        $code_id = Dever::param('code_id',$data);
        $data = Dever::db('active/order')->find($order_id);
        // $info = Dever::db('active/info_refund')->state(array('order_id'=>$order_id));
        // $active = Dever::db('active/info')->find($data['active_id']);
       $this->common($data,2,$num,$id);
        return 'reload';
    }
    
    public function show($id)
    {
        $data = Dever::db('active/order')->find($id);
        $refund_admin = '-';
        $rdate = '-';
        if ($data && isset($data['refund_admin']) && $data['refund_admin'] && $data['refund_admin']>0 && $data['rdate']) {
            $admin = Dever::load('manage/admin-find',$data['refund_admin']);
            $refund_admin = $admin['username'];
            $rdate = date('Y-m-d H:i',$data['rdate']);
        }
        $html = $refund_admin.'
'.$rdate;
        return $html;
    }
    public function active($id)
    {
        $data = Dever::db('active/info')->find($id);
        $html = array();
        $html['active_name'] = $data['name'];
        $info = Dever::db('active/code')->find($id);
        if ($info && isset($info['audit_admin']) && $info['audit_admin']  && $info['audit_admin'] > 0) {
            $aduit = Dever::load('manage/admin-find',$info['audit_admin']);
            $html['admin_name'] = $aduit['username'];
        } elseif ($info && $info['top_admin']) {
            $off = Dever::db('active/info_off')->find($info['top_admin']);
            $html['admin_name'] = $off['name'];
        }
        return $html;
    }
    public function user($id)
    {
        $html = '';
        $data = Dever::db('active/user')->find($id);
        if ($data) {
            $member = Dever::load('active/lib/user')->agent($data);
            if ($member) {
                $user = '
(代理商)';
            } else {
                $user = '';
            }
            $html = $data['name'].'
'.$data['mobile'].$user;
        }
        
        return $html;
    }
    public function dOff($id)
    {
        $data = Dever::db('active/code')->state(array('active_id' => $id,'status'=>1));
        $html = count($data);
        return $html;
    }
    public function insertInfoCode($id, $name, $data)
    {
        $code = Dever::param('code',$data);
        if ($code) {
            $info = Dever::db('active/info_code')->find(array('code'=>$code));
            if ($info['code']) {
                Dever::alert('核销码已核销');
            }
        }
    }
    public function updateInfoCode($id, $name, $data)
    {
        $code = Dever::param('code',$data);
        $data = Dever::db('active/code')->find(array('write_code'=>$code));
        if ($data) {
            $where['where_id'] = $data['id'];
            $where['status'] = 2;
            $where['offdate'] = time();
            $admin = Dever::load('manage/auth.info');
            $where['audit_admin'] = $admin['id'];
            Dever::db('active/code')->update($where);
        }
    }
    public function get()
    {
        $data[0]['name'] = '头衔';
        $data[0]['child'] = Dever::db('setting/title')->select();
        $data['state'] = 1;
        return $data;
    }
    public function search_api()
    {
        $value = Dever::input('value');
        if (!$value) {
            return '核销码不存在';
        }
        if ($value) {
            $data = Dever::db('active/code')->one(array('write_code' => $value,'state' =>1));
            $table = array();
            if ($data) {
                $user = Dever::db('active/user')->find(array('id'=>$data['join_uid']));
                $parent = Dever::db('active/user')->find(array('id'=>$data['buy_uid']));
                $table = array();
                $table['head'] = array('姓名', '手机号','邀请人', '邀请人手机号');
                $table['body'] = array();
                $table['body'] = array($user['name'], $user['mobile'],$parent['name'], $parent['mobile']);
                
                $result[] = array
                (
                    'type' => 'table',
                    'content' => $table,
                );
                $html = Dever::show('', $result, false, false);
                return $html;
            }else{
                return '核销码不存在';
            }
        } else {
            return '';
        }
    }
    public function checkMcode()
    {
        $mobile = Dever::input('mobile');
        $code = Dever::input('mcode');
        if (!$code) {
            Dever::alert('请输入验证码');
        }
        $code = Dever::load('passport/reg')->mcode($mobile, $code, 2);
        if (!$code) {
            Dever::alert('验证码输入错误');
        }
        return 'ok';
    }
    public function list()
    {
        $id = Dever::input('id');
        $info = Dever::db('active/order')->find($id);
        $active = Dever::db('active/info')->find($info['active_id']);
        $config = Dever::db('active/order')->config['config_status'];
        $status = Dever::status($config,$info['status']);
        if ( !$info['uid']) {
            $user = Dever::db('active/user')->find($info['mid']);
            $info['uid'] = $user['id'];
        }
        $code = Dever::db('active/code')->getCode(array('order_id' => $id,'status'=>'1,2'));
        $use_code = count($code);#已领取的所有数量
        // print_R($use_code);die;
        if (!$info['refund_num']) {
            $info['refund_num'] = 0;
        }
        $no_code = $info['num'] - $use_code - $info['refund_num'];#未使用的数量
        if ($info['uid'] && $info['uid'] > 0) {
            $user = Dever::db('active/user')->find($info['uid']);
            $user_name = $user['name'];
            $user_mobile = $user['mobile'];
            $user_idcard = $user['idcard'];
            $member = Dever::load('active/lib/user')->agent($user);
            if ($member) { 
                $role = Dever::db('setting/role')->find($member['role']);
                if (isset($role) && $role && isset($role['name']) && $role['name']) {
                    $role_name = '
'.$role['name'];
                } else {
                    $role_name = '';
                }
                $title = Dever::db('setting/title')->find($member['title_id']);
                if (isset($title) && $title && isset($title['name']) && $title['name']) {
                    $title_name = '('.$title['name'].')';
                } else {
                    $title_name = '';
                }
                $level = Dever::db('setting/level')->find($member['level_id']);
                if (isset($level) && $level && isset($level['name']) && $level['name']) {
                    $level_name = '('.$level['name'].')';
                } else {
                    $level_name = '';
                }
                $user_name = $member['name'].$role_name.$title_name.$level_name;
                $user_mobile = $member['mobile'];
                $user_idcard = $member['idcard'];
            }
        }
        if ($active['col'] && $active['col'] == 'idcard') {
            $user_idcard = $user['idcard'];
        } else {
            $user_idcard = '';
        }
        $field_name = '';
        $field_value = '';
        $field_sname = '';
        $field_svalue = '';
        $path = array();
        if ($info['path']) {
            $path = json_decode($info['path']);
            // print_R($path);die;
            foreach ($path as $k => $v) {
                $v = (array)$v;
                $field = Dever::db('active/info_field')->find($v['id']);
                if ($field['type'] == 1) {
                    $field_name = $field['name'];
                    $field_value = $v['value'];
                } elseif ($field['type'] == 2) {
                    $value = Dever::db('active/info_field_value')->find($v['value']);
                    // print_R($value['name']);die;
                    if ($value) {
                        $field_sname = $field['name'];
                        $field_svalue = $value['name'];
                    }
                }
            }
        }
        $result['订单信息'] = array
        (
            'type' => 'info',
            'content' => array
            (
                array
                (
                    array('订单单号', $info['order_num']),
                    array('活动名称', $active['name']),
                    array('订单状态', $status),
                ),
                array
                (
                    array('购买数量', $info['num']),
                    array('支付金额', $info['price']),
                ),
                array
                (
                    array('已使用', $use_code),
                    array('未使用', $no_code),
                    array('退款数量', $info['refund_num']),
                ),
            ),
        );
        $result['用户信息'] = array
        (
            'type' => 'info',
            'content' => array
            (
                array
                (
                    array('用户姓名', $user_name),
                    array('用户电话', $user_mobile),
                    array('用户身份证号', $user_idcard),
                ),
            ),
        );
        if ($path) {
            $result['报名信息'] = array
            (
                'type' => 'info',
                'content' => array
                (
                    array
                    (
                        array($field_name, $field_value),
                        array($field_sname, $field_svalue),
                        // array('用户身份证号', $user_idcard),
                    ),
                ),
            );
        }
        
        $button = array();
        if ($info['status'] > 1 && $no_code > 0 && $info['status'] != 3) {
            if (Dever::load('manage/auth')->checkFunc('active.order', 'editrefund', '未使用退款')) {
                $purl = Dever::url('project/database/update?project=active&table=info_refund&search_option_order_id='.$info['id'].'&col=num,order_id', 'manage');
                $button[] = array
                (
                    'type' => 'edit',
                    'link' => $purl,
                    'name' => '未使用退款',
                );
            }
        }
        
        if ($use_code >= 0) {
           $result +=  $this->table($id);
            
        }
        $head = array
        (
            'name' => '基本资料',
            'btn' => $button,
        );
        $html = Dever::show($head, $result);
        return $html;
    }
    private function table ($id) 
    {
        $data = Dever::db('active/code')->state(array('order_id' => $id));
        if ($data) {
            $head = array('参加人信息', '核销码', '核销状态', '领取时间', '核销时间', '核销人', '管理');
            $body = array();
            foreach ($data as $k => $v) {
                $user = Dever::db('active/user')->find($v['join_uid']);
                $join_name = '';
                if ($user) {
                    $join_name = $user['name'].'
'.$user['mobile'];
                }
                $admin_name = '';
                if ($v['status'] == 1) {
                    $status = '待核销';
                } elseif($v['status'] == 2) {
                    $status = '已核销';
                   if ($v['audit_admin'] && $v['audit_admin'] >0) {
                       $admin = Dever::load('manage/admin-find',$v['audit_admin']);
                       if ($admin) {
                            $admin_name = $admin['username'];
                       } 
                   } else {
                        if ($v['top_admin'] && $v['top_admin'] > 0) {
                            $admin = Dever::db('active/info_off')->find($v['top_admin']);
                            if ($admin) {
                                $admin_name = $admin['name'];
                            }
                        }
                   }
                } else {
                    $status = '已作废';
                }
                $cdate = '';
                if ($v['cdate']) {
                    $cdate = date('Y-m-d H:i',$v['cdate']);
                }
                $offdate = '';
                if ($v['offdate']) {
                    $offdate = date('Y-m-d H:i',$v['offdate']);
                }
                $m = '';
                if ($v['status'] == 1) {
                    $url = Dever::url('lib/manage.setOrder&order_id=' . $v['order_id'].'&code_id='.$v['id'], 'active');
                    $m = '退款';
                }
                $d = array
                (
                    $join_name,
                    $v['write_code'],
                    $status,
                    $cdate,
                    $offdate,
                    $admin_name,
                    $m,
                );
                $body[] = $d;
            }
            $result['核销码使用列表'] = array
            (
                'type' => 'table',
                'content' => array
                (
                    'head' => $head,
                    'body' => $body,
                )
            );
           return $result;
        } else {
            return array();
        }
    }
    public function setOrder_api($order_id,$code_id){
        $data = Dever::db('active/order')->find($order_id);
        $ids = $this->common($data,3,'',$code_id);
        if ($ids) {
            $w['where_id'] = $code_id;
            $w['status'] = 3;
            Dever::db('active/code')->update($w);
        }
        return 'reload';
    }
    public function common($data,$type,$num=false,$refund_id=false){
        $active = Dever::db('active/info')->find($data['active_id']);
        $info = Dever::db('active/info_refund')->state(array('order_id'=>$data['id']));
        if (time() > $active['act_start']) {
            Dever::alert('活动已开始,不能退款');
        }
        if ($type == 1) {
            $code = Dever::db('active/code')->find(array('order_id'=>$data['id']));
            if ($data['code_num'] > 0 || (isset($code) && $code)) {
                Dever::alert('此状态下不可退款');
            }
            if ($data['status'] != 2) {
                Dever::alert('此状态下不可退款');
            }
            $refund_num = $data['num'];
            $price = $data['price'];
        }
        if ($type == 2) {
            $price = $num * $active['price'];
            $refund_num = $num;
        }
        if ($type == 3) {
            $refund_num = 1;
            $price = $active['price'];
        }
        
        $param = array
        (
            'project_id' => 6,
            'channel_id' => 1,
            'system_source' => 1,
            'account_id' => 8,
            'order_id' => $data['order_num'],
            'refund_cash' => $price,
            //'refund_order_id' => '',
        );
        if ($type != 1) {
            $param['refund_order_id'] = $data['order_num'] . '_' . count($info);
        }
        
        if ($data['price'] > 0) {
            $result = Dever::load('pay/api.refund', $param);
            if (!$result) {
                # 退款失败,抛出错误
                //throw new \Exception('退款失败');
                Dever::alert('退款失败,请联系管理员');
            } else { 
                $admin = Dever::load('manage/auth.info');
                $time = time();
                $where['where_id'] = $data['id'];
                $where['status'] = 6;
                $where['refund_admin'] = $admin['id'];
                $where['rdate'] = $time;
                if (!$data['refund_num']) {
                    $data['refund_num'] = 0;
                }
                $where['refund_num'] = $refund_num + $data['refund_num'];
                if ($type == 1 || ($type == 2 && $price = $data['price'])) {
                    Dever::db('active/order')->update($where);
                } elseif (($type == 2 && $price != $data['price']) || $type == 3) {
                    $where['status'] = 5;
                    $ids = Dever::db('active/order')->update($where);
                    return $ids;
                }
                if ($type == 2) {
                    $insert['status'] = 2;
                    $insert['where_id'] = $refund_id;
                    $insert['audit_admin'] = $admin['id'];
                    Dever::db('active/info_refund')->update($insert);
                }
            }
        }
    }
    #更新数量
    public function upNum($order_id)
    {
        $data = Dever::db('active/order')->find($order_id);
        if (!$data['refund_num']) {
            $w['refund_num'] = 0;
        } else {
            $w['refund_num'] =$data['refund_num'];
        }
        if (!$data['code_num'] || $data['code_num'] < 0) {
            $w['code_num'] = 0;
        }
        if (!$data['no_num']) {
            $w['no_num'] = 0;
        }
        #已使用的数量
        $code = Dever::db('active/code')->getCode(array('order_id'=>$data['id'],'status'=>'1,2'));
        $w['code_num'] = count($code);
        #待核销的数量
        $no_code = Dever::db('active/code')->getCode(array('order_id'=>$data['id'],'status'=>1));
        $w['no_num'] = count($no_code);
        $w['where_id'] = $data['id'];
        Dever::db('active/order')->update($w);
    }
    public function xiu_api()
    {
        $data = Dever::db('active/order')->state();
        foreach ($data as $k => $v) {
            if (!$v['refund_num'] || $v['refund_num']<=0) {
                $w['refund_num'] = 0;
            } else {
                $w['refund_num'] =$v['refund_num'];
            }
            if (!$v['code_num'] || $v['code_num'] <= 0) {
                $w['code_num'] = -1;
            }
            if (!$v['no_num']) {
                $w['no_num'] = 0;
            }
            #已使用的数量
            $code = Dever::db('active/code')->getCode(array('order_id'=>$v['id'],'status'=>'1,2'));
            $w['code_num'] = count($code);
            if ($w['code_num'] == 0) {
                $w['code_num'] = -1;
            }
            #待核销的数量
            $no_code = Dever::db('active/code')->getCode(array('order_id'=>$v['id'],'status'=>1));
            $w['no_num'] = count($no_code);
            $w['where_id'] = $v['id'];
            Dever::db('active/order')->update($w);
        }
        return 'ok';
    }
}