<?php
class Service_ShipBatch extends Common_Service
{
    /**
     * @var null
     */
    public static $_modelClass = null;
    public static $projectType=array(
        '0'=>'',
        '1'=>'分销电商',
        '2'=>'正常电商',
    );
    /**
     * @return Table_ShipBatch|null
     */
    public static function getModelInstance()
    {
        if (is_null(self::$_modelClass)) {
            self::$_modelClass = new Table_ShipBatch();
        }
        return self::$_modelClass;
    }

    /**
     * 创建总单
     * @author solar
     * @param string $sb_code
     * @param string $sm_code
     * @param string $sb_truck_no
     * @return int
     */
    public static function create($sb_code, $sm_code = '', $sb_truck_no = '',$createRow=array())
    {
        $row['sb_code'] = $sb_code;
        $row['sm_code'] = $sm_code;
        $row['sb_truck_no'] = $sb_truck_no;
        $row['warehouse_id'] = Service_User::getUserWarehouseId();
        $row['creater_id'] = Service_User::getUserId();
        $row['sb_status'] = 0;
        $row['sb_add_time'] = date('Y-m-d H:i:s');
		$row['sb_update_time'] = date('Y-m-d H:i:s');
        $row=  array_merge($row, $createRow);
        return self::add($row);
    }

    /**
     * @param $row
     * @return mixed
     */
    public static function add($row)
    {
        $model = self::getModelInstance();
        return $model->add($row);
    }


    /**
     * @param $row
     * @param $value
     * @param string $field
     * @return mixed
     */
    public static function update($row, $value, $field = "sb_id")
    {
        $model = self::getModelInstance();
        return $model->update($row, $value, $field);
    }

    /**
     * @param $value
     * @param string $field
     * @return mixed
     */
    public static function delete($value, $field = "sb_id")
    {
        $model = self::getModelInstance();
        return $model->delete($value, $field);
    }

    /**
     * @param $value
     * @param string $field
     * @param string $colums
     * @return mixed
     */
    public static function getByField($value, $field = 'sb_id', $colums = "*")
    {
        $model = self::getModelInstance();
        return $model->getByField($value, $field, $colums);
    }

    /**
     * @return mixed
     */
    public static function getAll()
    {
        $model = self::getModelInstance();
        return $model->getAll();
    }

    /**
     * @param array $condition
     * @param string $type
     * @param int $pageSize
     * @param int $page
     * @param string $order
     * @return mixed
     */
    public static function getByCondition($condition = array(), $type = '*', $pageSize = 0, $page = 1, $order = "")
    {
        $model = self::getModelInstance();
        return $model->getByCondition($condition, $type, $pageSize, $page, $order);
    }

    public static function getLeftJoinUserByCondition($condition = array(), $type = '*', $pageSize = 0, $page = 1, $order = "")
    {
        $model = self::getModelInstance();
        return $model->getLeftJoinUserByCondition($condition, $type, $pageSize, $page, $order);
    }

    public static function getJoinOrderByCondition($condition = array(), $type = '*', $pageSize = 0, $page = 1, $order = ""){
        $model = self::getModelInstance();
        return $model->getJoinOrderByCondition($condition, $type, $pageSize, $page, $order);
    }

    public static function getOrderCodes($sb_code)
    {
        $model = self::getModelInstance();
        return $model->getOrderCodes($sb_code);
    }

    public static function getProductByCondition($condition){
        $model = self::getModelInstance();
        $list = $model->getProductByCondition($condition);
        $result = array('total'=>0);
        foreach($list as $row) {
            $goods_code = $row['goods_id'];
            if(!isset($result[$goods_code])) {
                $result[$goods_code] = array();
                $result[$goods_code]['goods_id'] = $goods_code;
                $result[$goods_code]['customer_id'] = $row['customer_id'];
                $result[$goods_code]['hs_code'] = $row['hs_code'];
                $result[$goods_code]['hs_goods_name'] = $row['hs_goods_name'];
                $result[$goods_code]['product_id'] = $row['product_id'];
                //$result[$goods_code]['hum_quantity_law'] = $row['hum_quantity_law'];
                $result[$goods_code]['hum_quantity_law'] = 0;
                $result[$goods_code]['quantity'] = 0;
                $result[$goods_code]['pu_code'] = $row['pu_code'];
                $result[$goods_code]['pu_code_law'] = $row['pu_code_law'];
                $result[$goods_code]['currency_code'] = $row['currency_code'];
                $result[$goods_code]['pu_code_second'] = $row['pu_code_second'];
                //$result[$goods_code]['hum_quantity_second'] = $row['hum_quantity_second'];
                $result[$goods_code]['hum_quantity_second'] = 0;
                $result[$goods_code]['total_price'] = 0;
                $result[$goods_code]['net_weight'] = 0;
            }
            $result[$goods_code]['net_weight'] += $row['quantity']*$row['product_weight'];
            $result[$goods_code]['hum_quantity_law'] += $row['hum_quantity_law']*$row['quantity'];
            //}
            $result[$goods_code]['hum_quantity_second'] += $row['hum_quantity_second']*$row['quantity'];
            $result[$goods_code]['quantity'] += $row['quantity'];
            //$total_price = $row['quantity']*$row['product_declared_value'];
            $total_price = $row['declared_value'];
            $result[$goods_code]['total_price'] += $total_price;
            $result['total'] += $total_price;
        }
        return $result;
    }

    public static function getSplit20($sb_code){
        $model = self::getModelInstance();
        return $model->getSplit20($sb_code);
    }

    public static function getTradeCountry($sb_code,$goods_id){
        $model = self::getModelInstance();
        return $model->getTradeCountry($sb_code,$goods_id);
    }


    /**
     * @param $val
     * @return array
     */
    public static function validator($val)
    {
        $validateArr = $error = array();

        return Common_Validator::formValidator($validateArr);
    }


    /**
     * @param array $params
     * @return array
     */
    public function getFields()
    {
        $row = array(

            'E0' => 'sb_id',
            'E1' => 'sb_code',
            'E2' => 'sm_code',
            'E3' => 'warehouse_id',
            'E4' => 'creater_id',
            'E5' => 'sb_status',
            'E6' => 'reference_no',
            'E7' => 'sb_truck_no',
            'E8' => 'sb_ship_time',
            'E9' => 'sb_add_time',
            'E10' => 'sb_update_time',
            'E11'=>'project_type',
            'E20' => 'order_code',
            'E21' => 'order_reference_no',
          
        );
        return $row;
    }

    /**
     * @将出货总单，导出4PX订单模板
     * @param array $sbCodes
     * @return array
     */
    public static function getShipBatch($sbCodes = array())
    {
        //中英文对应
        $keyMap = array(
            "A" => '客户单号',
            "B" => '服务商单号',
            "C" => '运输方式',
            "D" => '目的国家',
            "E" => '寄件人公司名',
            "F" => '寄件人姓名',
            "G" => '寄件人地址',
            "H" => '寄件人电话',
            "I" => '寄件人邮编',
            "J" => '寄件人传真',
            "K" => '收件人公司名',
            "L" => '收件人姓名',
            "M" => '州 \ 省',
            "N" => '城市',
            "O" => '联系地址',
            "P" => '收件人电话',
            "Q" => '收件人邮箱',
            "R" => '收件人邮编',
            "S" => '收件人传真',
            "T" => '买家ID',
            "U" => '交易ID',
            "V" => '保险类型',
            "W" => '保险价值',
            "X" => '订单备注',
            "Y" => '重量',
            "Z" => '是否退件',

            "AA" => '海关报关品名1',
            "AB" => '配货信息1',
            "AC" => '申报价值1',
            "AD" => '申报品数量1',
            "AE" => '配货备注1',

            "AF" => '海关报关品名2',
            "AG" => '配货信息2',
            "AH" => '申报价值2',
            "AI" => '申报品数量2',
            "AJ" => '配货备注2',

            "AK" => '海关报关品名3',
            "AL" => '配货信息3',
            "AM" => '申报价值3',
            "AN" => '申报品数量3',
            "AO" => '配货备注3',

            "AP" => '海关报关品名4',
            "AQ" => '配货信息4',
            "AR" => '申报价值4',
            "AS" => '申报品数量4',
            "AT" => '配货备注4',

            "AU" => '海关报关品名5',
            "AV" => '配货信息5',
            "AW" => '申报价值5',
            "AX" => '申报品数量5',
            "AY" => '配货备注5',
        );

        $orderCodeArr = $ordersData = array();
        if (!empty($sbCodes) && is_array($sbCodes)) {
            foreach ($sbCodes as $code) {
                $orderCodes = Service_ShipBatch::getOrderCodes($code);
                $orderCodeArr = array_merge($orderCodeArr, $orderCodes);
            }
        }
        $csvData = array();
        $csvData[1] = $keyMap; //Excel 表头
        if (count($orderCodeArr)) {
            $obj = new Service_PackProcess();
            $opObj = new Table_OrderProduct();
            $i = 2; //从第二行开始
            foreach ($orderCodeArr as $key => $code) {
                $k = $i++;
                $result = $obj->getOrderInfo($code);
                if ($result['state'] == '1' && isset($result['state'])) {
                    $orderProductRows = $opObj->getOrderProducts($code);
                    //$ordersData[$key]['orders'] = $result['data'];
                    // $ordersData[$key]['orderProduct'] = $orderProductRows;
                    $trackingNumber = $result['data']['ship']['tracking_number'];
                    if (strtoupper($result['data']['ship']['tracking_number']) == strtoupper($result['data']['order']['order_code'])) {
                        $trackingNumber = '';
                    }


                    $csvData[$k] = array(
                        "A" => $result['data']['order']['order_code'],
                        "B" => $trackingNumber,
                        "C" => $result['data']['order']['sm_code'],
                        "D" => $result['data']['address']['country']['country_code'],
                        "K" => $result['data']['address']['oab_company'],
                        "L" => $result['data']['address']['oab_firstname'] . ' ' . $result['data']['address']['oab_lastname'],
                        "M" => $result['data']['address']['oab_state'],
                        "N" => $result['data']['address']['oab_city'],
                        "O" => $result['data']['address']['oab_street_address1'] . ' ' . $result['data']['address']['oab_street_address2'],
                        "P" => $result['data']['address']['oab_phone'],
                        "Q" => $result['data']['address']['oab_email'],
                        "R" => $result['data']['address']['oab_postcode'],
                        "S" => $result['data']['address']['oab_fax'],
                        //    "T"=>'买家ID',
                        //   "U"=>'交易ID',
                        //   "V"=>'保险类型',
                        //   "W"=>'保险价值',
                        "X" => $result['data']['order']['remark'],
                        "Y" => 0,
                        //  "Z"=>'是否退件'
                    );
                    $weight = 0;
                    foreach ($orderProductRows as $pk => $pv) {
                        $weight += $pv['product_weight'] * $pv['op_quantity'];
                        //product
                    }
                    $csvData[$k]['Y'] = $weight;

                    //暂时先列出两个产品
                    $csvData[$k]['AA'] = $orderProductRows[0]['product_title_en'];
                   // $csvData[$k]['AB'] = $orderProductRows[0]['product_title_en'];
                    $csvData[$k]['AC'] = 5;//$orderProductRows[0]['product_declared_value'];
                    $csvData[$k]['AD'] = $orderProductRows[0]['op_quantity'];
                    // $csvData[$k]['AE']=$orderProductRows[0]['product_title_en'];
                    if (count($orderProductRows) > 1) {
                        $csvData[$k]['AF'] = $orderProductRows[1]['product_title_en'];
                       // $csvData[$k]['AG'] = $orderProductRows[1]['product_title_en'];
                        $csvData[$k]['AH'] = 5;//$orderProductRows[1]['product_declared_value'];
                        $csvData[$k]['AI'] = $orderProductRows[1]['op_quantity'];
                        //  $csvData[$k]['AJ']=$orderProductRows[1]['product_title_en'];
                    }
                }
            }
        }
        return $csvData;
        //print_r($csvData);die;
    }
    public function getProductsByCondition($condition,$type = '*', $pageSize = 0, $page = 1, $orderBy = ""){ 
        $model = self::getModelInstance();
        $list=  $model->getProductsByCondition($condition,$type, $pageSize, $page, $orderBy);
        if(empty($list[0]['c'])){ 
            $pu= new Service_ProductUom();
            foreach ($list as $k => $v) {
                
                if(empty($v['product_id'])){ 
                    unset($list[$k]);
                    continue;
                }
                if(!empty($v['pu_code'])){ 
                    $pu_code=$pu->getByField($v['pu_code'],'pu_code','pu_name');
                    $list[$k]['pu_code']=$pu_code['pu_name'];
                }
                if(!empty($v['pu_code_law'])){ 
                    $pu_code_law=$pu->getByField($v['pu_code_law'],'pu_code','pu_name');
                    $list[$k]['pu_code_law']=$pu_code_law['pu_name'];
                }
                if(!empty($v['pu_code_second'])){ 
                    $pu_code_second=$pu->getByField($v['pu_code_second'],'pu_code','pu_name');
                    $list[$k]['pu_code_second']=$pu_code_second['pu_name'];
                }
            }
        }else{ 
            $list=$list[0]['c'];
        }
        return $list;
    }

    public function getHsinfoExportBySbcode($condition ,$type ='' , $pageSize = 0, $page = 1, $orderBy = ""){
        $model = self::getModelInstance();
        $result = $model->getHsinfoExportBySbcode($condition,$type, $pageSize, $page, $orderBy);
        return $result;
    }
}