<?php
namespace app\index\controller;
use think\Controller;
use think\Loader;
use think\Db;
class Index extends Controller
{

    public function index(){
        //获取活动数据
        $data=db('activity')->where('parentid',0)->order('id asc')->limit(4)->select();
        foreach ($data as $k=>$v){
            $data[$k]['son']=db('activity')->where('parentid',$v['id'])->order('id asc')->select();
        }
        $this->assign('one',$data[0]);
        $this->assign('two',$data[1]);
        $this->assign('three',$data[2]);
        return $this->fetch();

    }
    //军训页面
    public function training(){
        $data=db('activity')->where('id',19)->find();
        $data['son']=db('activity')->where('parentid',$data['id'])->order('sonid asc')->select();
        $this->assign('data',$data);
        return $this->fetch();
    }
    //社会实践教育
    public function practice(){
        $data=db('activity')->where('id',28)->find();
        $data['son']=db('activity')->where('parentid',$data['id'])->order('sonid asc')->select();
        //这边要改成按照付款人数来显示
        foreach ($data['son'] as $k=>$v){
            $data['son'][$k]['buy_num']=db('order')->where(['aid'=>$v['id'],'status'=>2])->count();
        }
        $this->assign('data',$data);
        return $this->fetch();
    }
    
    //获取班级页面
    public function getClass(){
        $aid=(int) input('aid');
        $data=db('class')->where('aid',$aid)->select();
        return json($data);
    }

    public function paysuccess(){
        $id=(int)input('oid');
        //获得订单信息
        $data=db('order')->where('id',$id)->find();

        // 获取活动主题
        $son=db('activity')->where('id',$data['aid'])->find();
        $fu=db('activity')->where('id',$son['parentid'])->find();
        $data['title']=$fu['title'];
        $data['start_time']=$son['start_time'];
        $data['sex']=$data['sex']==1?'男':'女';
        $this->assign('data',$data);
        return $this->fetch();
    }

    public function insertOrder(){
        $data['aid']=(int)input('id');
        $data['grade']=input('grade');
        $data['name']=input('name');
        $data['school']=input('school');
        $data['sex']=(int)input('sex');
        $data['phone']=(int)input('phone');
        $data['sfz']=input('sfz');

        if(!$data['aid']){
            $res['code']='FAIL';
            $res['msg']='没有选择活动';
            return json($res);
        }
        if(!$data['name']){
            $res['code']='FAIL';
            $res['msg']='没有填写姓名';
            return json($res);
        }
        if(!$data['sex']){
            $res['code']='FAIL';
            $res['msg']='没有选择性别';
            return json($res);
        }
        if(!$data['school']){
            $res['code']='FAIL';
            $res['msg']='没有填写学校';
            return json($res);
        }

        if(!$data['grade']){
            $res['code']='FAIL';
            $res['msg']='没有填写年级';
            return json($res);
        }

        if(!$data['phone']){
            $res['code']='FAIL';
            $res['msg']='没有填写手机号';
            return json($res);
        }


        //验证手机号规则
        if(!preg_match('/^1([0-9]{9})/',$data['phone'])){
            $res['code']='FAIL';
            $res['msg']='手机号格式有误';
            return json($res);
        }

        //判断活动是否存在
        Db::startTrans();
        $activity_data=db('activity')->lock(true)->where(['id'=>$data['aid'],'parentid'=>['neq',0]])->find();
        if(!$activity_data){
            $res['code']='FAIL';
            $res['msg']='活动不存在';
            return json($res);
        }
        //判断人数有没有满
        $fuActivity_data=db('activity')->where(['id'=>$activity_data['parentid']])->find();
        if($fuActivity_data['max_num']<=$activity_data['buy_num']){
            $res['code']='FAIL';
            $res['msg']='活动人数已满,请报名其它活动';
            return json($res);
        }

        if($fuActivity_data['id']==19 or $fuActivity_data['id']==28){

        }else{
            //如果不是军训的话 就要身份证
            if(!$data['sfz']){
                $res['code']='FAIL';
                $res['msg']='没有填写身份证';
                return json($res);
            }
        }

        //插入未支付的订单
        $data['c_time']=date("Y-m-d H:i:s");
        $data['status']=1;
        $data['money']=$activity_data['price'];
        $newId=db('order')->insertGetId($data);
        db('activity')->where(['id'=>$data['aid']])->setInc('buy_num',1);
        Db::commit();

        $res['code']='SUCCESS';
        $res['msg']='支付参数获取成功';
        $res['id']=$newId;
        return json($res);

    }

    public function dopay(){
        //得到订单id
        $id=(int)input('id');
        //获得订单信息
        $data=db('order')->where('id='.$id)->find();
        $weixinpay=$data['money'];

        define('SYSAPPID','wx1364ecc533a2e290');
        define('SYSMCHID','1529570041');
        define('SYSKEY','290339EDC572D5E665EC2BC48AABC37A');
        define('SYSAPPSECRET','f98a5d97cec9d4e4698007e523cbccbe');

        Loader::import('wechatpay.lib.WxPay#Api');
        Loader::import('wechatpay.example.WxPay#JsApiPay');
        Loader::import('wechatpay.example.log');
        //初始化日志
        //$logHandler= new \CLogFileHandler(dirname(dirname(__FILE__))."/logs/".date('Y-m-d').'.log');
        //$log = \Log::Init($logHandler, 15);
        //①、获取用户openid
        $tools = new \JsApiPay();
        $openId = $tools->GetOpenid();
        if(!$openId){echo 'openid not';	return;}

        //将openid插入数据,并返回uid
        $temp=db('user')->where('openid',$openId)->find();
        if($temp){
            $uid=$temp['id'];
        }else{
            $uid=db('user')->insertGetId(['openid'=>$openId]);
        }
        //将uid插入数据库
        db('order')->where('id='.$id)->setField('uid',$uid);
        //②、统一下单
        $input=NULL;
        $input = new \WxPayUnifiedOrder();
        $input->SetBody("绿色学校");
        $input->SetAttach("绿色学校活动报名");
        $input->SetOut_trade_no($data['id']);
        $totalSum=$weixinpay*100;
        $input->SetTotal_fee($totalSum);
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 600));
        $input->SetGoods_tag('绿色学校');
        $input->SetNotify_url(HTTP.SITE_URL."/index.php/index/index/notify");
        $input->SetTrade_type("JSAPI");
        $input->SetOpenid($openId);

        $order = \WxPayApi::unifiedOrder($input);
        $jsApiParameters = $tools->GetJsApiParameters($order);
        $this->assign('jsApiParameters',$jsApiParameters);
        $this->assign('oid',$id);
        return $this->fetch();
        
        }


    //返回处理数据
    public function notify(){

        define('SYSAPPID','wx1364ecc533a2e290');
        define('SYSMCHID','1529570041');
        define('SYSKEY','290339EDC572D5E665EC2BC48AABC37A');
        define('SYSAPPSECRET','f98a5d97cec9d4e4698007e523cbccbe');

        Loader::import('wechatpay.example.notify');
        $notify = new \PayNotifyCallBack();
        $res=$notify->Handle(false);
        if($res){
            db('order')->where('id', $res['out_trade_no'])->setField(['status'=>2,'p_time'=>date('Y-m-d H:i:s')]);
            $temp= db('order')->where('id', $res['out_trade_no'])->find();
//            db('activity')->where('id', $temp['aid'])->setInc('buy_num',1);
            echo "<xml><return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg>
</xml>";
            exit;
        }
    }

    //再写一个现实订单页面
    public function myorder(){
        $pass=input('pass');
        if($pass!='dyrgg'){
            exit;
        }
        return $this->fetch();
    }
    public function orderList(){
        //获取活动数据
        $data=db('activity')->where('parentid',0)->order('id asc')->select();
        foreach ($data as $k=>$v){
            $data[$k]['son']=db('activity')->where('parentid',$v['id'])->order('id asc')->select();
            //获取每一期的数据
            foreach ($data[$k]['son'] as $k1=>$v1){
                $data[$k]['son'][$k1]['order']=db('order')->where(['aid'=>$v1['id']])->select();
            }
        }

        return json($data);
    }
    
    public function meorder(){
        define('SYSAPPID','wx1364ecc533a2e290');
        define('SYSMCHID','1529570041');
        define('SYSKEY','290339EDC572D5E665EC2BC48AABC37A');
        define('SYSAPPSECRET','f98a5d97cec9d4e4698007e523cbccbe');
        Loader::import('wechatpay.lib.WxPay#Api');
        Loader::import('wechatpay.example.WxPay#JsApiPay');
        Loader::import('wechatpay.example.log');
        //①、获取用户openid
        $tools = new \JsApiPay();
        $openId = $tools->GetOpenid();
        $this->assign('openid',$openId);

        return $this->fetch();
    }
    public function meorderList(){
        $openid=input('openid');
        $temp=db('user')->where('openid',$openid)->find();
        if($temp){
            $uid=$temp['id'];
        }else{
            $uid=db('user')->insertGetId(['openid'=>$openid]);
        }

        //获取活动数据
        $data=db('order')->where(['uid'=>$uid])->order('id asc')->select();
        foreach ($data as $k=>$v){
            //先获取子活动的信息
            $data[$k]['sonAc']=db('activity')->where('id',$v['aid'])->order('id asc')->find();
            //获取父活动的信息
            $data[$k]['fuAc']=db('activity')->where('id',$data[$k]['sonAc']['parentid'])->order('id asc')->find();
        }
        return json($data);
    }

    //下面的导出暂时先不用
   
    //导出表格
    public function exportExcel(){
        //处理数据

        $map['year']=input('year');
        $map['month']=input('month');;
        $monthData=  db('calendar')->where($map)->order('day asc')->select();
        //获取所有的人
        $manager_data=db('manager')->order('wl_active asc')->select();
        $tableheader[]='日期/姓名';
        foreach ($monthData as $k=>$v){
            if($v['month']<10){
                $v['month']='0'.$v['month'];
            }
            if($v['day']<10){
                $v['day']='0'.$v['day'];
            }
            $tableheader[]=$v['month'].'-'.$v['day'];
      
            foreach ($manager_data as $k1=>$v1){
                $mapson['manager_id']=$v1['id'];
                $mapson['time']=['like',$map['year'].'-'.$v['month'].'-'.$v['day'].'%'];
                $temp=db('signin')->where($mapson)->find();
                if($temp){
                    $in=substr($temp['time'] , 10 , 9);
                    $out=substr($temp['offtime'] , 10 , 9);

                    $zao=strtotime($temp['time'])<=strtotime($v['year'].'-'.$v['month'].'-'.$v['day'].' 08:30:00');
                    $wan=strtotime($temp['offtime'])>=strtotime($v['year'].'-'.$v['month'].'-'.$v['day'].' 18:00:00');
                    if($zao and $wan) {
                       $remark = '正常';
                    }else{
                        $remark = '异常';
                    }


                    $manager_data[$k1]['signin'][]="上:".$in ."\r\n下:".$out."\r\n".$remark;
                }else{
                    $manager_data[$k1]['signin'][]="无记录";
                }

            }
        }
      


        //dump($tableheader);

        //exit;
        $this->excelSigninExport($tableheader,$manager_data);
    }
    private function excelSigninExport($tableheader,$data = [],$title='')

    {

        $title='考勤表';
        //文件名
        $fileName = $title.".xls";
        //加载第三方类库
        Loader::import('PHPExcel.Classes.PHPExcel');
        Loader::import('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');
        //实例化excel类
        $excelObj = new \PHPExcel();
        //构建列数--根据实际需要构建即可
        $string="A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,AA,AB,AC,AD,AE,AF";
        $letter = explode(',',$string);
        //表头数组--需和列数一致
        $tableheader = $tableheader;
        //填充表头信息
        for ($i = 0; $i < count($tableheader); $i++) {
            $excelObj->getActiveSheet()->setCellValue("$letter[$i]1", "$tableheader[$i]");
            $excelObj->getActiveSheet()->getColumnDimension($letter[$i])->setWidth(12);
        }
        //循环填充数据
        foreach ($data as $k => $v) {
            $num = $k + 1 + 1;
            //设置每一列的内容
            $excelObj->setActiveSheetIndex(0)->setCellValue('A' . $num, $v['realname']);
            for ($i = 1; $i < count($tableheader); $i++) {
                $excelObj->setActiveSheetIndex(0)->setCellValue($letter[$i] . $num, $v['signin'][$i-1]);
            }



            //设置行高
            //$excelObj->getActiveSheet()->getRowDimension($k+4)->setRowHeight(30);
        }
        //以下是设置宽度
//    $excelObj->getActiveSheet()->getColumnDimension('A')->setWidth(46);
//    $excelObj->getActiveSheet()->getColumnDimension('B')->setWidth(20);
//    $excelObj->getActiveSheet()->getColumnDimension('C')->setWidth(10);
//    $excelObj->getActiveSheet()->getColumnDimension('D')->setWidth(20);

        //设置表头行高
//    $excelObj->getActiveSheet()->getRowDimension(1)->setRowHeight(28);
//    $excelObj->getActiveSheet()->getRowDimension(2)->setRowHeight(28);
//    $excelObj->getActiveSheet()->getRowDimension(3)->setRowHeight(28);

        //设置居中
        //$excelObj->getActiveSheet()->getStyle('A1:AE1'.($k+2))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        //所有垂直居中
        //$excelObj->getActiveSheet()->getStyle('A1:AE1'.($k+2))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);

        //设置字体样式
//    $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setName('黑体');
//    $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setSize(20);
//    $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setBold(true);
//    $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setBold(true);
//    $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setName('宋体');
//    $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setSize(16);
//    $excelObj->getActiveSheet()->getStyle('A1:D1'.($k+2))->getFont()->setSize(10);

        //设置自动换行
        $excelObj->getActiveSheet()->getStyle('A1:AF1'.($k+2))->getAlignment()->setWrapText(true);

        // 重命名表
        $fileName = iconv("utf-8", "gb2312", $fileName);

        // 设置下载打开为第一个表
        $excelObj->setActiveSheetIndex(0);

        //设置header头信息
        header('Content-Type: application/vnd.ms-excel;charset=UTF-8');
        header("Content-Disposition: attachment;filename={$fileName}");
        header('Cache-Control: max-age=0');
        $writer = \PHPExcel_IOFactory::createWriter($excelObj, 'Excel5');
        $writer->save('php://output');
        exit();

    }

}