<?php

class Financial_BilServeBillController extends Ec_Controller_Action
{
    public function preDispatch()
    {
        $this->tplDirectory = "financial/views/serve_bill/";
        $this->serviceClass = new Service_BilServeBill();
    }

    public function listAction()
    {
        $bilServeBillStatus = Process_BillConfig::bilServeBillStatus();
        $bilServeBillMode = Process_BillConfig::bilServeBillMode();
        $bilWriteOffSign = Process_BillConfig::bilWriteOffSign();

        if ($this->_request->isPost()) {
            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);

            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;

            $return = array(
                "state" => 0,
                "message" => "No Data"
            );

            $params = $this->_request->getParams();

            $condition = $this->serviceClass->getMatchFields($params);

            $condition['dateFor'] = isset($params['dateFor']) ? $params['dateFor'] . ' 00:00:00' : '';
            $condition['dateTo'] = isset($params['dateTo']) ? $params['dateTo'] . ' 23:59:59' : '';

            $count = $this->serviceClass->getJoinLeftByCondition($condition, 'count(*)');
            $return['total'] = $count;

            if ($count) {
                $showFields = array(

                    'sp_code',
                    'bsb_code',
                    'id_code',
                    'bsb_no',
                    'bsb_amount',
                    'currency_code',
                    'currency_rate',
                    'bsb_mode',
                    'bsb_quantity',
                    'bsb_payment_total',
                    'bsb_charge_weight_total',
                    'sm_code',
                    'bsb_status',
                    'bsb_writeoff_sign',
                    'bsb_creator_id',
                    'bsb_compare_bill_start',
                    'bsb_compare_bill_date_srart',
                    'bsb_compare_bill_end',
                    'bsb_compare_bill_date_end',
                    'bsb_verifier',
                    'bsb_verifier_time',
                    'bsb_note',
                    'bsb_compare_bill_date_last',
                    'bsb_start_time',
                    'bsb_end_time',
                    'bsb_transfer_days',
                    'bsb_writeoff_sign_time',
                    'bsb_add_time',
                    'bsb_update_time',
                    'bsb_id',
                );
                $showFields = $this->serviceClass->getFieldsAlias($showFields);
                $rows = $this->serviceClass->getJoinLeftByCondition($condition, $showFields, $pageSize, $page, array('bsb_id desc'));

                foreach ($rows as $key => $row) {
                    $payAmount=0;
                    $applyAmount=0;
                    if ($row['E12'] == '3' || $row['E12'] == '4') {
                        //已核销金额
                        $payAmount = Table_BilServeBillBalanceRecords::getInstance()->getTotal($row['E0']);
                        $payAmount = empty($payAmount) ? 0 : $payAmount;
                        //已申请未支付金额
                        $noPay = Table_FeePaymentRecords::getInstance()->getTotalByBill($row['E0'], array(1));
                        $noPay = empty($noPay) ? 0 : $noPay;
                        $applyAmount = $row['E4'] - $noPay - $payAmount;
                    }
                    $rows[$key]['payAmount'] = $payAmount;
                    $rows[$key]['applyAmount'] = $applyAmount;
                }

                $return['data'] = $rows;
                $return['state'] = 1;
                $return['message'] = "";
                $return['bilServeBillStatus'] = $bilServeBillStatus;
                $return['bilServeBillMode'] = $bilServeBillMode;
                $return['bilWriteOffSign'] = $bilWriteOffSign;

            }
            die(Zend_Json::encode($return));
        }

        $this->view->bilServeBillStatus = $bilServeBillStatus;
        $this->view->bilServeBillMode = $bilServeBillMode;
        $this->view->bilWriteOffSign = $bilWriteOffSign;

        $this->view->dateFor = date("Y-m-d", strtotime("-32 days"));
        $this->view->dateTo = date("Y-m-d");

        echo Ec::renderTpl($this->tplDirectory . "bil_serve_bill_index.tpl", 'layout');
    }

    /**
     * @desc 未出帐订单费用
     */
    public function notAuditOrderAction()
    {
        // 运输方式
        $shippingMethod = Common_DataCache::getShippingMethod();
        $businessType = Process_BillConfig::businessType();
        $customerSettlementType = Process_BillConfig::customerSettlementType();

        $return = array(
            "state" => 0,
            "message" => "No Data"
        );

        if ($this->_request->isPost()) {
            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);

            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;

            $condition['sp_code'] = trim($this->_request->getParam("serveCode", ""));
            $condition['sm_code'] = trim($this->_request->getParam("shippingMethod", ""));
            $condition['bt_code'] = trim($this->_request->getParam("businessType", ""));
            $condition['billDate'] = trim($this->_request->getParam("billDate", ""));

            if (empty($condition['sp_code'])) {
                $return['message'] = "请填写服务商代码";
                die(Zend_Json::encode($return));
            }
            if (empty($condition['billDate'])) {
                $return['message'] = "帐单日期不能为空";
                die(Zend_Json::encode($return));
            }

            if (isset($condition['billDate'])) {
                $condition['bp_chargeable_time'] = date("Y-m-d H:i:s", strtotime($condition['billDate']));
            }

            $count = Service_BilPayment::getNotAuditFeesByCondition($condition, 'count(*)');

            $return['total'] = $count;

            if ($count) {
                $type = array(
                    'bil_payment.bp_id',
                    'bil_payment.bp_chargeable_time',
                    'bil_business.bt_code',
                    'bil_payment.sm_code',
                    'bil_business_attach.bb_refer_code',
                    'bil_business_attach.bb_service_number',
                    'bil_business_attach.bb_reference_no',
                    'bil_payment.bp_amount',
                    'bil_payment.currency_code',
                    'service_provider.sp_code',
                    'fee_type.ft_name_cn',
                );
                $rows = Service_BilPayment::getNotAuditFeesByCondition($condition, $type, $pageSize, $page, array("bil_payment.bp_chargeable_time"));
                $return['data'] = $rows;
                $return['state'] = 1;
                $return['message'] = "";
                $return['businessType'] = $businessType;
                $return['shippingMethod'] = $shippingMethod;
                $return['customerSettlementType'] = $customerSettlementType;
            }
            die(Zend_Json::encode($return));
        }

        $this->view->businessType = $businessType;
        $this->view->shippingMethod = $shippingMethod;
        $this->view->customerSettlementType = $customerSettlementType;
        $this->view->billDate = date("Y-m-d H:i", strtotime("-1 days"));

        echo Ec::renderTpl($this->tplDirectory . "not_audit_order.tpl", 'layout');
    }


    /**
     * @desc 生成服务商帐单
     */
    public function addBillAction()
    {
        $paramId = $this->_request->getParam('paramId', '0');
        $rpType = Process_BillConfig::rpType('auto');
        $customerSettlementType = Process_BillConfig::customerSettlementType('auto');
        $bt = Process_BillConfig::bt('auto');

        //提交数据
        if ($this->_request->isPost()) {
            $return = array(
                "state" => 0,
                "message" => "error",
                "data" => array()
            );

            $param = array(
                'customer_code' => $this->_request->getParam('customer_code', ''),
                'bi_id' => $this->_request->getParam('bi_id', ''),
                'amount' => $this->_request->getParam('amount', ''),
                'bt_code' => $this->_request->getParam('bt_code', 'EX'),
                'ft_code' => $this->_request->getParam('ft_code', ''),
                'rp_type' => $this->_request->getParam('rp_type', ''),
                'note' => $this->_request->getParam('note', ''),
                'currency_code' => $this->_request->getParam('currency_code', ''),
            );

            $obj = new Process_Business();
            $return = $obj->editBusinessFeeTransaction($param);
            die(Zend_Json::encode($return));
        }

        $this->view->feeType = Service_FeeType::getByCondition(array(), '*', 0);
        $this->view->currency = Service_Currency::getByCondition(array(), '*', 0);
        $this->view->bt = $bt;
        $this->view->serveBillMode = Process_BillConfig::bilServeBillMode('auto');
        $this->view->shippingMethod = Service_ShippingMethod::getByCondition(array(), '*', 0, 0, array('sm_code asc'));
        echo Ec::renderTpl($this->tplDirectory . "add_bill.tpl", 'layout');
    }


    /**
     * 根据关键字搜索服务商
     */
    public function getByKeywordAction()
    {
        $db = Common_Common::getAdapter();
        $keyword = $this->_request->getParam('term', '');

        $limit = $this->_request->getParam('limit', '20');

        $sql = "select sp_code,sp_name from service_provider where sp_code like '%" . trim($keyword) . "%' or sp_name like '%" . trim($keyword) . "%' limit " . $limit;
        $result = $db->fetchAll($sql);

        foreach ($result as $k => $v) {
            $t = array(
                'value' => trim($v['sp_code']),
                'label' => '[' . $v['sp_code'] . ']' . $v['sp_name']
            );
            $v = array_merge($v, $t);
            $result[$k] = $v;
        }

        die(Zend_Json::encode($result));
    }


    /**
     * @desc 根据费用生成服务商帐单
     */
    public function uploadAction()
    {
        $result = array(
            "state" => 0,
            "message" => "Fail.",
            "data" => array()
        );
        if ($this->getRequest()->isPost()) {
            set_time_limit(0);
            ini_set('memory_limit', '2000M');
            $file = $_FILES['fileToUpload'];
            $param = $this->_request->getParams();
            $obj = new Process_ServeBill();
            $return = $obj->uploadStandardBillTransaction($param, $file);
            die(Zend_Json::encode($return));
        }
        die(Zend_Json::encode($result));
    }


    /**
     * @desc 作废帐单
     */
    public function deleteAction()
    {
        $codes = $this->_request->getParam('codes', array());
        $note = $this->_request->getParam('note', '');
        $result = array(
            'state' => '0',
            'message' => '没有找到匹配的信息',
            'data' => array()
        );
        if ($this->_request->isPost()) {
            if (!empty($codes) && is_array($codes)) {
                $result['state'] = 1;
                $result['message'] = '';
                $obj = new Process_ServeBill();
                foreach ($codes as $code) {
                    $param = array(
                        'code' => $code,
                        'note' => $note,
                    );
                    $result['data'][] = $obj->deleteBillTransaction($param);
                }
            }
        }
        die(Zend_Json::encode($result));
    }


    /**
     * @desc 帐单明细
     */
    public function detailAction()
    {
        set_time_limit(300);
        $id_code = $this->_request->getParam('id_code', 'random');
        switch (strtolower($id_code)) {
            case 'standard':
                $return = array(
                    "state" => 0,
                    "message" => "No Data"
                );
                $paramId = $this->_request->getParam('paramId', '');
                $bilBillDetailStatus = Process_BillConfig::bilBillDetailStatus('auto');
                $bilBillDiffType = Process_BillConfig::bilBillDiffType('auto');
                $billStatusArr = Process_BillConfig::serveBillDifferenceStatus('auto');
                $withdrawSign = Process_BillConfig::withdrawSign('auto');
                $billDetailAbnormalType=Process_BillConfig::billDetailAbnormalType('auto');
                if ($this->_request->isPost()) {
                    $page = $this->_request->getParam('page', 1);
                    $pageSize = $this->_request->getParam('pageSize', 20);

                    $page = $page ? $page : 1;
                    $pageSize = $pageSize ? $pageSize : 20;

                    $condition['bsbd_compare_sign'] = trim($this->_request->getParam("bsbd_compare_sign", ""));
                    $condition['bsd_diff_type'] = trim($this->_request->getParam("bsd_diff_type", ""));
                    $condition['bsbd_refer_hawb_code'] = trim($this->_request->getParam("bsbd_refer_hawb_code", ""));
                    $condition['bsbd_hawb_code'] = trim($this->_request->getParam("bsbd_hawb_code", ""));
                    $condition['bsd_status'] = trim($this->_request->getParam("bsd_status", ""));
                    $condition['bsd_withdraw_sign'] = trim($this->_request->getParam("bsd_withdraw_sign", ""));
                    $condition['bsb_id'] = $paramId;
                    $condition['weight_start'] = trim($this->_request->getParam("weight_start", ""));
                    $condition['weight_end'] = trim($this->_request->getParam("weight_end", ""));
                    $condition['fee_start'] = trim($this->_request->getParam("fee_start", ""));
                    $condition['fee_end'] = trim($this->_request->getParam("fee_end", ""));

                    $count = Service_BilServeBillDetail::getAllByCondition($condition, 'count(*)');

                    $return['total'] = $count;

                    if ($count) {
                        $type = '*,bil_serve_bill_detail.bsbd_id as bill_bsbd_id,(SELECT SUM(bp_amount) as amount FROM bil_payment WHERE bsbdf_id=bil_serve_bill_detail_fee.bsbdf_id) as amount';
                        $rows = Service_BilServeBillDetail::getAllByCondition($condition, $type, $pageSize, $page, array("bil_serve_bill_detail.bsbd_shipment_time"));
                        $return['data'] = $rows;
                        $return['state'] = 1;
                        $return['message'] = "";
                        $return['bilBillDetailStatus'] = $bilBillDetailStatus;
                        $return['bilBillDiffType'] = $bilBillDiffType;
                        $return['billStatusArr'] = $billStatusArr;
                        $return['withdrawSign'] = $withdrawSign;
                        $return['billDetailAbnormalType'] = $billDetailAbnormalType;
                    }
                    die(Zend_Json::encode($return));
                }
                $billRow = Service_BilServeBill::getByField($paramId, 'bsb_id');
                $this->view->bilBillDetailStatus = $bilBillDetailStatus;
                $this->view->bilBillDiffType = $bilBillDiffType;
                $this->view->paramId = $paramId;
                $this->view->billStatusArr = $billStatusArr;
                $this->view->withdrawSign = $withdrawSign;
                $this->view->billRow = $billRow;
                $this->view->billDetailAbnormalType=$billDetailAbnormalType;
                echo Ec::renderTpl($this->tplDirectory . "standard.tpl", 'layout');
                break;
            case 'random':
                $return = array(
                    "state" => 0,
                    "message" => "No Data"
                );
                $paramId = $this->_request->getParam('paramId', '');
                $bilBillDetailStatus = Process_BillConfig::bilBillDetailStatus('auto');
                $bilBillDiffType = Process_BillConfig::bilBillDiffType('auto');
                $billStatusArr = Process_BillConfig::serveBillDifferenceStatus('auto');
                $withdrawSign = Process_BillConfig::withdrawSign('auto');
                $billDetailAbnormalType=Process_BillConfig::billDetailAbnormalType('auto');
                if ($this->_request->isPost()) {
                    $page = $this->_request->getParam('page', 1);
                    $pageSize = $this->_request->getParam('pageSize', 20);

                    $page = $page ? $page : 1;
                    $pageSize = $pageSize ? $pageSize : 20;

                    $condition['bsbd_compare_sign'] = trim($this->_request->getParam("bsbd_compare_sign", ""));
                    $condition['bsd_diff_type'] = trim($this->_request->getParam("bsd_diff_type", ""));
                    $condition['bsbd_refer_hawb_code'] = trim($this->_request->getParam("bsbd_refer_hawb_code", ""));
                    $condition['bsbd_hawb_code'] = trim($this->_request->getParam("bsbd_hawb_code", ""));
                    $condition['bsd_status'] = trim($this->_request->getParam("bsd_status", ""));
                    $condition['bsd_withdraw_sign'] = trim($this->_request->getParam("bsd_withdraw_sign", ""));
                    $condition['bsb_id'] = $paramId;


                    $count = Service_BilServeBillDetail::getAllByCondition($condition, 'count(*)');

                    $return['total'] = $count;

                    if ($count) {
                        $type = '*,bil_serve_bill_detail.bsbd_id as bill_bsbd_id,(SELECT SUM(bp_amount) as amount FROM bil_payment WHERE bsbdf_id=bil_serve_bill_detail_fee.bsbdf_id) as amount';
                        $rows = Service_BilServeBillDetail::getAllByCondition($condition, $type, $pageSize, $page, array("bil_serve_bill_detail.bsbd_shipment_time"));
                        $return['data'] = $rows;
                        $return['state'] = 1;
                        $return['message'] = "";
                        $return['bilBillDetailStatus'] = $bilBillDetailStatus;
                        $return['bilBillDiffType'] = $bilBillDiffType;
                        $return['billStatusArr'] = $billStatusArr;
                        $return['withdrawSign'] = $withdrawSign;
                        $return['billDetailAbnormalType'] = $billDetailAbnormalType;
                    }
                    die(Zend_Json::encode($return));
                }
                $billRow = Service_BilServeBill::getByField($paramId, 'bsb_id');
                $this->view->bilBillDetailStatus = $bilBillDetailStatus;
                $this->view->bilBillDiffType = $bilBillDiffType;
                $this->view->paramId = $paramId;
                $this->view->billStatusArr = $billStatusArr;
                $this->view->withdrawSign = $withdrawSign;
                $this->view->billRow = $billRow;
                $this->view->billDetailAbnormalType=$billDetailAbnormalType;
                echo Ec::renderTpl($this->tplDirectory . "random.tpl", 'layout');
                break;

        }
    }

    /**
     * @desc 费用明细
     */
    public function feeDetailAction()
    {
        $return = array(
            "state" => 0,
            "message" => "No Data"
        );
        $paramId = $this->_request->getParam('paramId', '');
        if ($this->_request->isPost()) {
            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);

            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;

            $paramId = empty($paramId) ? '--' : $paramId;

            $condition['bsbdf_id'] = $paramId;

            $count = Table_BilPayment::getInstance()->getBillFeeDetailByBusinessCondition($condition, 'count(*)');
            $return['total'] = $count;

            if ($count) {
                $rows = Table_BilPayment::getInstance()->getBillFeeDetailByBusinessCondition($condition, '*', 0);
                $return['data'] = $rows;
                $return['state'] = 1;
                $return['message'] = "";
            }
            die(Zend_Json::encode($return));
        }
        $this->view->paramId = $paramId;
        echo Ec::renderTpl($this->tplDirectory . "fee_detail.tpl", 'layout');
    }


    /**
     * @desc 获取处理方式
     */
    public function getProcessDataAction()
    {
        $paramId = $this->_request->getParam('paramId', '');
        $opType = $this->_request->getParam('opType', '0');
        $row = Service_BilServeBillDifference::getByField($paramId, 'bsbd_id');
        $bilBillDiffType = Process_BillConfig::bilBillDiffType('auto');
        $bilBillDiffProcessResult = Process_BillConfig::bilBillDiffProcessResult('auto');
        $billDetailAbnormalType = Process_BillConfig::billDetailAbnormalType('auto');

        $feeRow = Service_BilServeBillDetailFee::getByField($row['bsbd_id'], 'bsbd_id');

        //我公司计算的金额
        $row['payment'] = Table_BilPayment::getInstance()->getByFeeIdTotal($feeRow['bsbdf_id']);
        $row['payment'] = empty($row['payment']) ? 0 : $row['payment'];
        $row['bsd_process_text'] = $bilBillDiffProcessResult[$row['bsd_process']];
        $row['bsd_diff_type_text'] = $bilBillDiffType[$row['bsd_diff_type']];
        $row['ft_code'] = $feeRow['ft_code'];
        $row['bsbdf_amount'] = $feeRow['bsbdf_amount'];
        $row['ft_name_cn'] = '--';
        if (!empty($feeRow['ft_code'])) {
            $ftRow = Service_FeeType::getByField($feeRow['ft_code'], 'ft_code');
            $row['ft_name_cn'] = $ftRow['ft_name_cn'];
        }
        $row['ft_code'] = $feeRow['ft_code'];
        $this->view->diff = $row;
        $this->view->bilBillDiffProcessResult = $bilBillDiffProcessResult;
        $this->view->billDetailAbnormalType = $billDetailAbnormalType;
        $this->view->paramId = $row['bsbd_id'];
        $this->view->opType = $opType;
        echo $this->view->render($this->tplDirectory . 'difference.tpl');
    }
	
    /**
     * 批量处理差异
     */
    public function getBatchProcessDataAction()
    {
    	$paramIds = $this->_request->getParam('paramIds', '');
    	$opType = $this->_request->getParam('opType', '0');
    	$bilBillDiffType = Process_BillConfig::bilBillDiffType('auto');
    	$bilBillDiffProcessResult = Process_BillConfig::bilBillDiffProcessResult('auto');
    	$billDetailAbnormalType = Process_BillConfig::billDetailAbnormalType('auto');
    	
    	$paramIdArr = explode(',', trim($paramIds, ','));
    	if(!empty($paramIdArr) && is_array($paramIdArr)){
    		$diffRows = $diffProcess = $diffAbnormalType= array();
    		foreach ($paramIdArr as $paramId){
    			$diffRow = Service_BilServeBillDifference::getByField($paramId, 'bsbd_id');

    			//排除已经申请的数据
    			if(($diffRow['bsd_status'] != 0 || $diffRow['bsd_process'] != 0) && strtolower($diffRow['bsd_withdraw_sign']) != 'y'){
    				continue;
    			}
    			
    		//	$bsbData = Service_BilServeBill::getByField($diffRow['bsb_id'], 'bsb_id', array('bsb_code', 'bsb_no'));
    			//账单号
    		//	$diffRow['sp_bsb_code'] = $bsbData['bsb_code'];
    			//服务商账单号
    		//	$diffRow['sp_bsb_no'] = $bsbData['bsb_no'];
    			$bsbdData = Service_BilServeBillDetail::getByField($diffRow['bsb_id'], 'bsb_id', array('bsbd_hawb_code', 'bsbd_refer_hawb_code'));
    			//服务商账单中的服务商货件号码
    			$diffRow['bsbd_hawb_code'] = $bsbdData['bsbd_hawb_code'];
    			//服务商账单中的参考快件号码，一般为服务商收货时的快件号码
    			$diffRow['bsbd_refer_hawb_code'] = $bsbdData['bsbd_refer_hawb_code'];
    			$diffRow['bsd_process_text'] = $bilBillDiffProcessResult[$diffRow['bsd_process']];
    			$diffRow['bsd_diff_type_text'] = $bilBillDiffType[$diffRow['bsd_diff_type']];
    			$diffRows[] = $diffRow;
    			//处理结果
    			$diffProcess[] = $diffRow['bsd_process'];
    			//差异种类
    			$diffAbnormalType[] = $diffRow['bsd_abnormal_type'];
    		}
    	}
		
    	$this->view->diffRows = $diffRows;
    	$this->view->paramIds = $paramIds;
    	$this->view->process = count(array_unique($diffProcess)) > 1 ? 0 : $diffProcess[0] ;
    	$this->view->abnType = count(array_unique($diffAbnormalType)) > 1 ? 0 : $diffAbnormalType[0] ;
    	$this->view->bilBillDiffProcessResult = $bilBillDiffProcessResult;
    	$this->view->billDetailAbnormalType = $billDetailAbnormalType;
    	$this->view->opType = $opType;
    	echo $this->view->render($this->tplDirectory . 'batch_difference.tpl');
    }
	
    /**
     * @desc 单票处理
     */
    public function confirmAction()
    {
        $paramId = $this->_request->getParam('paramId', '');
        $proType = $this->_request->getParam('proType', '');
        $note = $this->_request->getParam('note', '');
        $abnormalType = $this->_request->getParam('abnormalType', '');
        $accepted_amount = $this->_request->getParam('accepted_amount', '');
        $result = array(
            'state' => '0',
            'message' => '没有找到匹配的信息',
            'data' => array()
        );
        if ($this->_request->isPost()) {
            $obj = new Process_ServeBill();
            $param = array(
                'bsbd_id' => $paramId,
                'proType' => $proType,
                'abnormalType' => $abnormalType,
                'amount' => $accepted_amount,
                'note' => $note,
            );
            $result = $obj->confirmBillTransaction($param);
        }
        die(Zend_Json::encode($result));
    }
	
    /**
     * 批量差异处理
     */
    public function batchCyConfirmAction()
    {
    	$result = array(
    			'state' => '0',
    			'message' => '没有找到匹配的信息',
    			'data' => array()
    	);
    	$paramIds = $this->_request->getParam('paramIds', '');
    	$proType = $this->_request->getParam('proType', '');
    	$note = $this->_request->getParam('note', '');
    	$abnormalType = $this->_request->getParam('abnormalType', '');
    	if ($this->_request->isPost()) {
    		$obj = new Process_ServeBill();
    		$paramIdArr = explode(',', trim($paramIds, ','));
    		if(is_array($paramIdArr) && !empty($paramIdArr)){
    			$resultArr = array();
    			foreach ($paramIdArr as $paramId){
    				$diffRow = Service_BilServeBillDifference::getByField($paramId, 'bsbd_id');
    				$bsbdData = Service_BilServeBillDetail::getByField($diffRow['bsb_id'], 'bsb_id', array('bsbd_hawb_code', 'bsbd_refer_hawb_code'));
    				//服务商账单中的服务商货件号码
    				$diffRow['bsbd_hawb_code'] = $bsbdData['bsbd_hawb_code'];
    				//服务商账单中的参考快件号码，一般为服务商收货时的快件号码
    				$diffRow['bsbd_refer_hawb_code'] = $bsbdData['bsbd_refer_hawb_code'];
		    		$param = array(
		    				'bsbd_id' => $paramId,
		    				'proType' => $proType,
		    				'abnormalType' => $abnormalType,
		    				'note' => $note,
		    		);
	    			$oneResult = $obj->confirmBillTransaction($param);
	    			$resultArr[$diffRow['bsbd_hawb_code']] = $oneResult;
    			}
    			die(Zend_Json::encode($resultArr));
    		}else{
    			$result['message'] = '批量提交错误!';
    		}
    	}
    	die(Zend_Json::encode($result));
    }
    
    /**
     * @desc 单票处理 审核
     */
    public function processAction()
    {
        $opCodes = $this->_request->getParam('opCodes', array());
        $opType = $this->_request->getParam('opType', '');
        $result = array(
            'state' => '0',
            'message' => '没有找到匹配的信息',
            'data' => array()
        );
        if ($this->_request->isPost()) {
            if (!empty($opCodes)) {
                $result['state'] = '1';
                $obj = new Process_ServeBill();
                foreach ($opCodes as $code) {
                    $param = array(
                        'bsbd_id' => $code,
                        'opType' => $opType,
                    );
                    $result['data'][] = $obj->processBillTransaction($param);
                }
            }
        }
        die(Zend_Json::encode($result));
    }

    /**
     * @desc 单票处理 审核
     */
    public function batchConfirmAction()
    {
        $bsbd_ids = $this->_request->getParam('bsbd_ids', array());
        $note = $this->_request->getParam('note', '');
        $result = array(
            'state' => '0',
            'message' => '没有找到匹配的信息',
            'data' => array()
        );
        if ($this->_request->isPost()) {
            if (!empty($bsbd_ids)) {
                $result['state'] = '1';
                $obj = new Process_ServeBill();
                foreach ($bsbd_ids as $code) {
                    $param = array(
                        'bsbd_id' => $code,
                        'proType' => 1,
                        //    'abnormalType' => $abnormalType,
                        //  'amount' => ,
                        'note' => $note,
                    );
                    $result['data'][] = $obj->confirmBillTransaction($param);
                }
            }
        }
        die(Zend_Json::encode($result));
    }


    /**
     * @desc 编辑服务商帐单
     */
    public function editBillAction()
    {
        $paramId = $this->_request->getParam('paramId', '0');
        $rpType = Process_BillConfig::rpType('auto');
        $customerSettlementType = Process_BillConfig::customerSettlementType('auto');
        $bt = Process_BillConfig::bt('auto');

        //提交数据
        if ($this->_request->isPost()) {
            $return = array(
                "state" => 0,
                "message" => "error",
                "data" => array()
            );
            $param = array(
                'bsb_id' => $this->_request->getParam('bsb_id', ''),
                'bsb_amount' => $this->_request->getParam('amount', ''),
                'bsb_no' => $this->_request->getParam('bsb_no', ''),
                'currency_code' => $this->_request->getParam('currency_code', ''),
                'currency_rate' => $this->_request->getParam('currency_rate', ''),
                'bsb_start_time' => $this->_request->getParam('dateFor', ''),
                'bsb_end_time' => $this->_request->getParam('dateTo', ''),
                'bsb_note' => $this->_request->getParam('note', ''),
                'sm_code' => $this->_request->getParam('sm_code', ''),
            );

            $obj = new Process_ServeBill();
            $return = $obj->editBillTransaction($param);
            die(Zend_Json::encode($return));
        }
        $billRow = Service_BilServeBill::getByField($paramId, 'bsb_code');
        $billRow['bsb_start_time'] = date('Y-m-d', strtotime($billRow['bsb_start_time']));
        $billRow['bsb_end_time'] = date('Y-m-d', strtotime($billRow['bsb_end_time']));
        $spRow = Service_ServiceProvider::getByField($billRow['sp_code'], 'sp_code');
        $billRow['sp_name'] = $spRow['sp_name'];
        $this->view->currency = Service_Currency::getByCondition(array(), '*', 0);
        $this->view->bt = $bt;
        $this->view->billRow = $billRow;
        $this->view->serveBillMode = Process_BillConfig::bilServeBillMode('auto');
        $this->view->shippingMethod = Service_ShippingMethod::getByCondition(array(), '*', 0, 0, array('sm_code asc'));
        $this->view->bankAccount = Service_ServiceBankAccount::getByCondition(array('sp_id' => $spRow['sp_id']), '*', 0, 0, array('bk_code asc'));
        echo Ec::renderTpl($this->tplDirectory . "edit_bill.tpl", 'layout');
    }


    /**
     * @desc 申请付款
     */
    public function applyPaymentAction()
    {
        $paramId = $this->_request->getParam('paramId', '0');     
        //是否有合并支付账单
        $isAllSubmit = Table_FeePaymentRecords::getInstance()->getBillLikeId('%,'.$paramId.',%', array(1));
        if(!empty($isAllSubmit) && is_array($isAllSubmit)){
        	die('<h3 style="text-align:center; color: #E06B26">该账单已提交合并支付申请，请先处理完合并申请付款后再试!</h3>');
        }
        $rpType = Process_BillConfig::rpType('auto');
        $customerSettlementType = Process_BillConfig::customerSettlementType('auto');
        $bt = Process_BillConfig::bt('auto');
        $bsb_id = $this->_request->getParam('bsb_id', '');
        $bsb_bank_account = $this->_request->getParam('bsb_bank_account', '');
        $apply_amount = $this->_request->getParam('apply_amount', '');
        $note = $this->_request->getParam('note', '');
        //提交数据
        if ($this->_request->isPost()) {
            $result = array(
                "state" => 0,
                "message" => "Fail.",
                "data" => array()
            );
            if (empty($bsb_id)) {
                die(Zend_Json::encode($result));
            }
            $billRow = Service_BilServeBill::getByField($bsb_id, 'bsb_id');
            if (empty($billRow)) {
                $result['message'] = "没有找到匹配的帐单";
                die(Zend_Json::encode($result));
            }
            if ($billRow['bsb_writeoff_sign'] == 'y') {
                $result['message'] = "帐单已核销，不允许申请";
                die(Zend_Json::encode($result));
            }
            $bsb_bank_account = $billRow['bsb_bank_account'];
            $spCode = $billRow['sp_code'];
            $attach = array();
            if (empty($bsb_bank_account)) {
                $param = array(
                    "payer_code" => $spCode,
                    "so_code" => 'sp',
                    "pm_code" => 'CASH',
                    "fpr_transaction_no" => '',
                    "fpr_transaction_date" => '',
                    "fpr_status" => '1',
                    "ft_code" => '', //帐单
                    "ba_id" => '',
                    "fpr_amount" => $apply_amount,
                    "fpr_currency_code" => $billRow['currency_code'],
                    "fpr_note" => $note,
                    "bill_id" => $bsb_id,
                    "fpr_payin_time" => '',
                );
            } else {
                $param = array(
                    "payer_code" => $spCode,
                    "so_code" => 'sp',
                    "pm_code" => 'BANK',
                    "fpr_transaction_no" => '',
                    "fpr_transaction_date" => '',
                    "fpr_status" => '1',
                    "ft_code" => '',
                    "ba_id" => '',
                    "fpr_amount" => $apply_amount,
                    "fpr_currency_code" => $billRow['currency_code'],
                    "fpr_note" => $note,
                    "bill_id" => $bsb_id,
                    "fpr_payin_time" => '',
                );
                //查看服务商银行信息
                $bankRow = Service_ServiceBankAccount::getByField($bsb_bank_account, 'sba_bank_account');
				//银行信息
                $attach = array(
                    'save_payment_account' => 0,
                    'ftra_payer_bank_name' => (isset($bankRow['sba_bank_branch'])) ? $bankRow['sba_bank_branch'] : '',
                    'ftra_payer_account_name' => (isset($bankRow['sba_account_name'])) ? $bankRow['sba_account_name'] : '',
                    'ftra_payer_account' => (isset($bankRow['sba_bank_account'])) ? $bankRow['sba_bank_account'] : $bsb_bank_account,
                );
            }
            $obj = new Process_Financial();
            $result = $obj->paymentTransaction($param, $attach);
            die(Zend_Json::encode($result));
        }
        $billRow = Service_BilServeBill::getByField($paramId, 'bsb_id');
        if (empty($billRow)) {
            die('no data');
        }
        $billRow['bsb_start_time'] = date('Y-m-d', strtotime($billRow['bsb_start_time']));
        $billRow['bsb_end_time'] = date('Y-m-d', strtotime($billRow['bsb_end_time']));
        $spRow = Service_ServiceProvider::getByField($billRow['sp_code'], 'sp_code');
        $billRow['sp_name'] = $spRow['sp_name'];
        //已核销金额
        $payAmount = Table_BilServeBillBalanceRecords::getInstance()->getTotal($paramId);
        $payAmount = empty($payAmount) ? 0 : $payAmount;
        $billRow['payAmount'] = $payAmount;
        //已申请未支付金额
        $noPay = Table_FeePaymentRecords::getInstance()->getTotalByBill($paramId, array(1));
        $noPay = empty($noPay) ? 0 : $noPay;

        $billRow['apply_amount'] = $billRow['bsb_amount'] - $noPay - $payAmount;

        $this->view->billRow = $billRow;
        $this->view->paramId = $paramId;
        $this->view->serveBillMode = Process_BillConfig::bilServeBillMode('auto');
        echo Ec::renderTpl($this->tplDirectory . "apply_payment.tpl", 'layout');
    }
	
    /**
     * 合并付款页面显示数据
     */
    public function applyAllPaymentAction(){
    	$paramIds = $this->_request->getParam('paramIds', '');
        $paramIdArr = explode(',', $paramIds);
    	//是否有合并支付账单
        foreach ($paramIdArr as $key => $value) {
           $isAllSubmit = Table_FeePaymentRecords::getInstance()->getBillLikeId('%,'.$value.',%', array(1));
            if(!empty($isAllSubmit) && is_array($isAllSubmit)){
                die('<h3 style="text-align:center; color: #E06B26">账单中已存在合并提交，请先处理完合并申请付款后再试!</h3>');
            }
        }
    	/*$isAllSubmit = Table_FeePaymentRecords::getInstance()->getBillLikeId('%,'.$paramIds.',%', array(1));
    	if(!empty($isAllSubmit) && is_array($isAllSubmit)){
    		die('<h3 style="text-align:center; color: #E06B26">账单中已存在合并提交，请先处理完合并申请付款后再试!</h3>');
    	}*/
    	if(empty($paramIds) || $paramIds == ''){
    		die('参数错误（账单ID获取失败）');
    	}else{
	    	//$paramIdArr = explode(',', $paramIds);
	    	if(!empty($paramIdArr) && is_array($paramIdArr)){
	    		//初始化统计数组
	    		$spCodes = $spNames = $bankAccounts = $bsbNos = $currencyRates = $bsbStartTimes = $bsbEndTimes = $bsbNotes = $currencyCodes = $bsbAmounts = $payAmounts = $applyAmounts = array();
	    		foreach ($paramIdArr as $paramId){
	    			$billRow = Service_BilServeBill::getByField($paramId, 'bsb_id');
	    			if(empty($billRow)){
	    				die('No Data');
	    			}
	    			$spRow = Service_ServiceProvider::getByField(strtoupper($billRow['sp_code']), 'sp_code');
	    			$billRow['sp_name'] = $spRow['sp_name'];
	    			$spNames[] = $spRow['sp_name'];
	    			$spCodes[] = $spRow['sp_code'];
	    			$bankAccounts[] = $billRow['bsb_bank_account'];
	    			$currencyRates[] = $billRow['currency_rate'];
	    			$bsbNos[] = $billRow['bsb_no'];
	    			$bsbStartTimes[] = date('Y-m-d', strtotime($billRow['bsb_start_time']));
	    			$bsbEndTimes[] = date('Y-m-d', strtotime($billRow['bsb_end_time']));
	    			$bsbNotes[] = $billRow['bsb_note'];
	    			$currencyCodes[] = $billRow['currency_code'];
	    			
	    			//统计总金额
	    			$bsbAmounts[] = $billRow['bsb_amount'];
	    			 //已核销金额
			        $payAmount = Table_BilServeBillBalanceRecords::getInstance()->getTotal($paramId);
			        $payAmount = empty($payAmount) ? 0 : $payAmount;
			        $payAmounts[] = $payAmount;
			        
			        //已申请未支付金额
					$noPay = Table_FeePaymentRecords::getInstance()->getTotalByBill($paramId, array(1));
					$noPay = empty($noPay) ? 0 : $noPay;
			        
			        //应支付
			        $applyAmount = $billRow['bsb_amount'] - $noPay - $payAmount;
			        $applyAmounts[] = $applyAmount;
	    		}
	    		
	    		//多个服务商或者不同货币种类不能合并付款
	    		$spCodes = array_unique($spCodes);
	    		$spNames = array_unique($spNames);
	    		$bankAccounts = array_unique($bankAccounts);
	    		$currencyRates = array_unique($currencyRates);
	    		$currencyCodes = array_unique($currencyCodes);
	    		if(count($spCodes) > 1 || count($spNames) > 1 || count($bankAccounts) > 1 || count($currencyRates) > 1 || count($currencyCodes) > 1){
	    			die('<h3 style="text-align:center; color: #E06B26">相同服务商并且相同币种才能合并申请付款，请核对后再试!</h3>');
	    		}
	    		
				//服务商
				$this->view->spCode = $spCodes[0];
				//服务商名字
				$this->view->spName = $spNames[0];
				//银行账户
				$this->view->bankAccount = $bankAccounts[0];
				//当时银行汇率
				$this->view->currencyRate = $currencyRates[0];
				$this->view->currencyCode = $currencyCodes[0];
				$this->view->bsbNos= $bsbNos;
				$this->view->bsbStartTimes = $bsbStartTimes;
				$this->view->bsbEndTimes = $bsbEndTimes;
	    		$this->view->bsbNotes = $bsbNotes;
	    		//总金额
	    		$this->view->bsbAmounts = array_sum($bsbAmounts);
	    		$this->view->payAmounts = array_sum($payAmounts);
	    		$this->view->applyAmounts = array_sum($applyAmounts) <= 0 ? 0 : array_sum($applyAmounts);
	    		$this->view->paramIds = empty($paramIds) ? '' : $paramIds;
	    		echo Ec::renderTpl($this->tplDirectory . "apply_all_payment.tpl", 'layout');
	    	}else {
	    		die('参数错误（账单ID获取失败）');
	    	}
    	}
    }
    
    /**
     * 合并付款提交信息处理
     */
    public function applyAllPaymentDoAction(){
		$result = array(
			"state" => 0,
			"message" => "Fail.",
			"data" => array()
		);
		if($this->_request->isPost()){
			//申请ID字符串
			$paramIds = $this->_request->getParam('paramIds', '');
			//银行账户
			$bsbBankAccount = $this->_request->getParam('bsb_bank_account', '');
			//申请金额
			$applyAmount = $this->_request->getParam('apply_amount', 0);
			//真实金额
			$realApplyAmount = $this->_request->getParam('real_apply_amount', 0);
			//付款备注
			$bsbNote = $this->_request->getParam('note', '');
			//服务商编号
			$spCode = $this->_request->getParam('spCode', '');
			//服务商名称
			$spName = $this->_request->getParam('spName', '');
			//币种
			$currencyCode = $this->_request->getParam('currencyCode', '');
			if($applyAmount > $realApplyAmount) {
				$result['message'] .= '申请金额大于实际金额,请核对后再试！';
				die(Zend_Json::encode($result));
			}
			if (empty($paramIds)) {
				$result['message'] .= '账单ID获取失败(Bill ID for failure)!';
				die(Zend_Json::encode($result));
			}
			$paramIdArr = explode(',', $paramIds);
			if(!empty($paramIdArr) && is_array($paramIdArr)){
				foreach ($paramIdArr as $pk=>$pv){
					$billRow = Service_BilServeBill::getByField($pv, 'bsb_id');
					if(empty($billRow) || !is_array($billRow)){
						$result['message'] .= '没有找到匹配的帐单，未匹配账单ID：'.$pv.'。(Did not find the matching bill)';
						die(Zend_Json::encode($result));
					}
					if(strtolower($billRow['bsb_writeoff_sign']) == 'y'){
						$result['message'] .= '帐单已核销，不允许申请，核销账单ID：'.$pv.'。(The bill has been written off and is not allowed to apply)';
						die(Zend_Json::encode($result));
					}
				}
			}
			//初始化付款通知数据
			$param = array(
				'payer_code' => $spCode,
				'so_code' => 'sp',
				'fpr_transaction_no' => '',
				'fpr_transaction_date' => '',
				'fpr_status' => '1',
				'ft_code' => '',
				'ba_id' => '',
				'fpr_amount' => $applyAmount,
				'fpr_currency_code' => $currencyCode,
				'fpr_note' => $bsbNote,
				'bill_id' => ','.$paramIds.',',
				//记录所有合并支付的bill_id
				'bill_id_all' => $paramIds.',',
				'fpr_payin_time' => '',
				//标示为合并付款
				'fpr_desc'=> 'merge'
			);
			//区分现金和银行卡
			if(empty($bsbBankAccount)){
				$param['pm_code'] = 'CASH';
				//现金支付没有银行卡信息
				$attach = array();
			}else {
				$param['pm_code'] = 'BANK';
				//查看服务商银行信息
				$bankRow = Service_ServiceBankAccount::getByField($bsbBankAccount, 'sba_bank_account');
				//银行信息
				$attach = array(
					'save_payment_account' => 0,
					'ftra_payer_bank_name' => (isset($bankRow['sba_bank_branch'])) ? $bankRow['sba_bank_branch'] : '',
					'ftra_payer_account_name' => (isset($bankRow['sba_account_name'])) ? $bankRow['sba_account_name'] : '',
					'ftra_payer_account' => (isset($bankRow['sba_bank_account'])) ? $bankRow['sba_bank_account'] : $bsbBankAccount
				);
			}
			$obj = new Process_Financial();
			$result = $obj->bulkPaymentTransaction($param, $attach);
		}
		die(Zend_Json::encode($result));
    }
    
    /**
     * @desc 批量审核帐单
     */
    public function batchVerifyAction()
    {
        $opCodes = $this->_request->getParam('codes', array());
        $result = array(
            'state' => '0',
            'message' => '没有找到匹配的信息',
            'data' => array()
        );
        if ($this->_request->isPost()) {
            if (!empty($opCodes)) {
                $result['state'] = '1';
                $obj = new Process_ServeBill();
                foreach ($opCodes as $code) {
                    $param = array(
                        'bsb_code' => $code,
                    );
                    $result['data'][] = $obj->verifyBillTransaction($param);
                }
            }
        }
        die(Zend_Json::encode($result));
    }


    /**
     * @desc 帐单详细
     */
    public function viewAction()
    {
        $bilServeBillStatus = Process_BillConfig::bilServeBillStatus('auto');
        $bilReviewSign = Process_BillConfig::bilReviewSign('auto');
        $paramId = $this->_request->getParam("paramId", '0');
        $billRow = Service_BilServeBill::getByField($paramId, 'bsb_id');
        if (empty($billRow)) {
            die('no data');
        }
        $spRow=Service_ServiceProvider::getByField($billRow['sp_code'],'sp_code');
        $billRow['sp_name']=$spRow['sp_name'];
        $billRow['status_text']=$bilServeBillStatus[$billRow['bsb_status']];
        $billRow['pay_amount']=Table_BilServeBillBalanceRecords::getInstance()->getTotal($paramId);
        if($billRow['bsb_creator_id']=='0'){
            $billRow['creatorName']="系统";
        }else{
            $userArr=Service_User::getByField($billRow['bsb_creator_id']);
            $billRow['creatorName']=$userArr['user_name'];
        }
        if($billRow['bsb_verifier']=='0'){
            $billRow['verifierName']="系统";
        }else{
            $userArr=Service_User::getByField($billRow['bsb_verifier']);
            $billRow['verifierName']=$userArr['user_name'];
        }

        $this->view->data =$billRow;
        $this->view->billStatus = $bilServeBillStatus;
        $this->view->billLog = Service_BilServeBillLog::getUserByCondition(array('bsb_id' => $paramId), '*', 0, 0, array('bsbl_id desc'));
        echo Ec::renderTpl($this->tplDirectory . "bill_detail.tpl", 'layout');
    }

    /**
     * @desc 获取费用汇总信息(帐单明细页面)
     */
    public function feeListAction()
    {
        $return = array (
            "state" => 0,
            "message" => "No Data"
        );
        if ($this->_request->isPost()) {
            $businessType = Process_BillConfig::businessType('auto');
            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);
            $billId = $this->_request->getParam('billId', '0');
            $billId = empty($billId) ? '-1' : $billId;
            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;

            $condition['bsb_id'] = $billId;
            $count = Table_BilServeBillDetailFee::getInstance()->getAllByCondition($condition, 'count(*)');
            $return['total'] = $count;

            if ($count) {
                $type = '*,(SELECT SUM(bp_amount) as amount FROM bil_payment WHERE bsbdf_id=bil_serve_bill_detail_fee.bsbdf_id) as amount';
                $rows = Table_BilServeBillDetailFee::getInstance()->getAllByCondition($condition, $type, $pageSize, $page, array("bil_serve_bill_detail.bsbd_shipment_time"));
                $return['data'] = $rows;
                $return['state'] = 1;
                $return['message'] = "";
                $return['businessType'] = $businessType;
            }
        }
        die(Zend_Json::encode($return));
    }
    public function checkCurrencyRateAction(){
        $return = array (
            "state" => 0,
            "message" => "No Data"
        );        
        if($this->_request->isPost()){
            $currency_code = $this->_request->getParam('currency_code','');
            $currency_rate = $this->_request->getParam('currency_rate','');
            if(empty($currency_code) || empty($currency_rate)){
                $return['message'] = "币种必选或者币种汇率必填！";
            }else{
                $currency = Service_Currency::getByField($currency_code, 'currency_code');
                if($currency_rate!=$currency['currency_rate']){
                    $return['state'] = 1;
                    $return['message'] = "汇率与系统汇率不一致，请确认";
                }else{
                    $return['state'] = 2;
                    $return['message'] = "汇率一致";
                }
            }
        }else{
            $return['message'] = "非法请求！";
        }
        die(Zend_Json::encode($return));
    }
    
    /**
     * [FunctionName 导出账单]
     * @param string $value [description]
     */
    public function exportBillAction()
    {
        $billId = $this->_request->getParam('billId', 0);
        if(empty($billId)){
            die('账单ID获取失败');
        }

        set_time_limit(0); 
        error_reporting(E_ALL & ~E_NOTICE);

        require_once("PHPExcel.php");
        require_once("PHPExcel/Reader/Excel2007.php");
        require_once("PHPExcel/Reader/Excel5.php");
        require_once('PHPExcel/IOFactory.php');

        $objExcel = new PHPExcel();
        $objProps = $objExcel->getProperties();
        $objProps->setCreator('EC');
        $objProps->setTitle('Template');
        $objExcel->setActiveSheetIndex(0);
        //当前sheet
        $objActSheet = $objExcel->getActiveSheet();
        //设置默认字体和大小
        $objExcel->getDefaultStyle()->getFont()->setName('微软雅黑');
        $objExcel->getDefaultStyle()->getFont()->setSize(10);
        //设置sheet 的 name 
        $objActSheet->setTitle('服务商账单明细');
        //加粗字体
        $objActSheet->getStyle('A1')->getFont()->setSize(16);
        $objActSheet->getStyle('A1')->getFont()->setBold(true);
        //水平居中
        $objActSheet->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        //垂直居中
        $objActSheet->getStyle('A1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
        //行高
        $objActSheet->getRowDimension('1')->setRowHeight(28);
        //合并单元格设置表头
        $objActSheet->mergeCells('A1:L1');
        $objActSheet->setCellValue('A1', '服务商账单明细表');
        //账单数据
        $billData = Service_BilServeBill::getByField($billId, 'bsb_id', array('bsb_id', 'id_code', 'sp_code', 'bsb_code', 'sm_code', 'bsb_no'));
        //表格数据
        $xlsData = Service_BilServeBill::getBillData($billData);
        $fileName = $billData['sp_code'].'-'.$billData['bsb_code'].'-'.date("YmdHis");

        //边框样式
        $styleArray = array(
            'borders' => array(
                'allborders' => array(
                    //粗边框
                    //'style' => PHPExcel_Style_Border::BORDER_THICK,
                    //细边框
                    'style' => PHPExcel_Style_Border::BORDER_THIN,
                    //'color' => array('argb' => 'FFFF0000'),
                ),
            ),
        );

        if (!empty($xlsData)) {
            //表头
            $ExcelKey = $xlsData[2];
            foreach ($ExcelKey as $key => $val) {
                //宽度自适应
                if(in_array($key, array('A', 'B', 'C', 'D', 'E'))){
                    $objActSheet->getColumnDimension($key)->setAutoSize(true);  
                }
                //标题
                $objActSheet->getStyle($key.'2')->applyFromArray($styleArray);
                $objActSheet->setCellValue($key.'3', $val);
            }
            
            //单独列宽
            $objActSheet->getColumnDimension('F')->setWidth(11);
            $objActSheet->getColumnDimension('G')->setWidth(12);
            $objActSheet->getColumnDimension('H')->setWidth(8);
            $objActSheet->getColumnDimension('I')->setWidth(11);
            $objActSheet->getColumnDimension('J')->setWidth(9);
            $objActSheet->getColumnDimension('K')->setWidth(8);
            $objActSheet->getColumnDimension('L')->setWidth(15);

            //明细
            foreach ($xlsData as $key => $detailArr) {
                foreach ($ExcelKey as $k => $v) {
                    $val = isset($detailArr[$k]) ? $detailArr[$k] : '';
                    //边框
                    $objActSheet->getStyle($k.$key)->applyFromArray($styleArray);
                    //数字格式
                    if(in_array($k, array('F', 'G', 'H', 'I', 'J', 'K'))){
                    //  $objActSheet->getStyle($k.$key)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE); 
                        $objActSheet->getStyle($k.$key)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED3);
                        /*
                        if( $key > 2){
                            $val = sprintf("%.3f", $val);
                        }
                        */
                    }
                    $objActSheet->setCellValue($k.$key, $val);
                }
                //合计
                if($key-1 == count($xlsData)){
                    $objActSheet->mergeCells('A'.$key.':E'.$key);
                    $objActSheet->getStyle('A'.$key)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                }
            }
        } else {
            $objActSheet->setCellValue('A2', "没有找到匹配的数据");
        }
        
        header('Pragma:public');
        header('Content-Type:application/x-msexecl;name="' . $fileName . '.xls');
        header("Content-Disposition:inline;filename=" . $fileName . '.xls');
        $objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');
        $objWriter->save('php://output');
        
    }
}