<?php
namespace app\em\model;
use app\em\controller\Payment;

class EmPayment extends Base
{
    protected $table = 'em_payment';

    public function getPayDateAttr($val){
        if($val =='' || $val == 0){
            return '尚未付款';
        }
        return date('Y-m-d H:i:s',$val);
    }
    public function setPayDateAttr($val){
        if(is_int($val) && strlen($val) >= 10) return $val;
        if(date('Y-m-d H:i:s',strtotime($val)) == $val){
            return strtotime($val);
        }
        return 0;
    }

    //缴费单+search
    public function getPaymentList($map,$Nowpage,$limits){

        //先找到账单
        $data = self::alias('pay')
            ->field('pay.*')
            ->field('epi.invoice_id')
            ->field('em.em_numb')
            ->field('r.region_name,station.station_name')
            ->leftJoin(['em_payment_invoice'=>'epi'],'epi.payment_id = pay.payment_id')
            ->leftJoin(['em_invoice'=>'ei'],'ei.invoice_id=epi.invoice_id')
            ->leftJoin(['em_account'=>'ea'],'ea.account_id=ei.account_id')
            ->leftJoin(['em'],'em.id=ea.em_id')
            ->leftJoin(['station_info'=>'station'],'station.station_id=em.station_id')
            ->leftJoin(['region'=>'r'],'station.area_id = r.id')
            ->where($map)
            ->order('pay.id desc')
            ->group('pay.payment_id')
            ->page($Nowpage, $limits)
            ->select()
            ->toarray();

        $arr = [];
        foreach ($data as $v){
            $arr[] = $v['payment_id'];
        }

        $data2 = self::alias('pay')
            ->field('pay.*')
            ->field('em.em_numb,r.region_name,station.station_name')
            ->leftJoin(['em_account'=>'ea'],'ea.account_id=pay.account_id')
            ->leftJoin(['em'],'em.id=ea.em_id')
            ->leftJoin(['station_info'=>'station'],'station.station_id=em.station_id')
            ->leftJoin(['region'=>'r'],'station.area_id = r.id')
            ->where($map)
            ->whereNotIn('pay.payment_id',$arr)
            ->order('pay.id desc')
            ->group('pay.payment_id')
            ->page($Nowpage, $limits)
            ->select()
            ->toarray();

        $data = array_merge($data,$data2);

        $sortKey = [];
        foreach ($data as $k=>$item){
            $data[$k]['state'] = Payment::PAYMENT_STATUS[$item['status']];
            $data[$k]['style'] = Payment::PAYMENT_STAUS_STYLE[$item['status']];

            $data[$k]['payment_type'] = Payment::PAYMENT_TYPE[$item['payment_type']];
            $sortKey[$k] = $item['create_time'];
        }
        array_multisort($sortKey, SORT_DESC, $data);

        return $data;
    }
    public function getPaymentCount($map){

        //先找到账单
        $data = self::alias('pay')
            ->field('pay.*')
            ->field('epi.invoice_id')
            ->field('em.em_numb')
            ->field('r.region_name,station.station_name')
            ->leftJoin(['em_payment_invoice'=>'epi'],'epi.payment_id = pay.payment_id')
            ->leftJoin(['em_invoice'=>'ei'],'ei.invoice_id=epi.invoice_id')
            ->leftJoin(['em_account'=>'ea'],'ea.account_id=ei.account_id')
            ->leftJoin(['em'],'em.id=ea.em_id')
            ->leftJoin(['station_info'=>'station'],'station.station_id=em.station_id')
            ->leftJoin(['region'=>'r'],'station.area_id = r.id')
            ->where($map)
            ->count();

        $data2 = self::alias('pay')
            ->field('pay.*')
            ->field('em.em_numb,r.region_name,station.station_name')
            ->leftJoin(['em_account'=>'ea'],'ea.account_id=pay.account_id')
            ->leftJoin(['em'],'em.id=ea.em_id')
            ->leftJoin(['station_info'=>'station'],'station.station_id=em.station_id')
            ->leftJoin(['region'=>'r'],'station.area_id = r.id')
            ->where($map)
            ->count();

        return intval($data + $data2);
    }
    //通过缴费单id返回缴费单关联账单信息
    public function getinvsInfo($payment_id){
      //1.获取所关联账单的账单id,通过账单id查询账单信息
         $invIdArr = EmPaymentInvoice::field('invoice_id')->where('payment_id','=',$payment_id)->select()->toArray();

         //降维
        $invArr = [];
        foreach ($invIdArr as $inv){
            $invArr[] = $inv['invoice_id'];
        }
        $invModel = new EmInvoice();
        $invs = $invModel->alias('inv')
                        ->field('inv.*')
                        ->field('station.station_name,station.proj_number')
                        ->field('em.em_numb')
                        ->leftJoin(['em_invoice_useage'=>'eiu'],'eiu.invoice_id=inv.invoice_id')
                        ->leftJoin(['em_useage'=>'eu'],'eu.useage_id = eiu.useage_id')
                        ->leftJoin(['em'],'em.id=eu.em_id')
                        ->leftJoin(['station_info'=>'station'],'station.station_id=em.station_id')
                        ->where(['inv.invoice_id'=>$invArr])
                        ->select();
        return $invs;
    }

    //获取所有缴费类型
    public static function getAllType(){
        $data = EmPaymentType::field('id,title')->select()->toArray();
        return $data;
    }

    //解析一个缴费类型
    public static function getTypeByTypeId($id){
        $types = self::getAllType();
        foreach ($types as $type){
            if($type['id'] == $id){
                return $type['title'];
            }
        }
    }
}