<?php
class Api_Pre_PreDataProcess{
    protected $bodyInfo;
    protected $orderCodeList = [];
    protected $invCodeList =[];
    protected $headInfo=[];
    protected $param;
    public $error=[];

    public function setParam($param){
        $this->param=$param;
    }
    public function getError(){
        return $this->error;
    }
    public function setError($error){
        $this->error = $error;
    }
    /**
     * @todo 获取出货总单的预录入数据
     */
    public function saveShipBatchPreData(){
        $result = array(
            'state'=>0,
            'message'=>'',
            'error'=>[],
            'code'=>'',
        );
        try {
            $this->validatorShipBatch();
            $result['error'] = $this->error;
            if(empty($this->error)){
                //执行写入数据库动作
                //获取数据
                /*$ddd = new Service_ShipBatch_ShipInvProcess($this->param['codlist']);
                var_dump($ddd);
                exit;*/
                $spp = new Service_ShipBatch_ShipPreProcess($this->param['codlist']);
                //$this->param[''];
                $spp->getBgCompany($this->param['bg_company']);
                $spp->setParam($this->param);

                $row = $spp->getExportEx();
                if($row['state']=='1'){
                    $this->writepreToDB($row['data']);
                    $code = $row['data']['bg_pri_entry_data']['ref_no'];
                    $result['code'] = $code;
                }

                if(!empty($errroMsg)){
                    throw new Exception(implode(',',$errroMsg));
                }
                //$shipbatchInv->getExportEx();
                //$outInvIfo = $shipbatchInv->getExportList();
                $result['state'] = 1;



                //


                //写入数据库
                //$this->saveShipBatchPreDataToDb();
            }
        }catch (Exception $e){
            $result["message"] = $e->getMessage();
        }
        return $result;
    }
    /**
     * @todo 将数据写入到数据库
     */
    public function writepreToDB($preData){
        $bg_pri_entry_data = $preData['bg_pri_entry_data'];

        $bg_pri_entry_data_detail_body_head = $preData['bg_pri_entry_data_detail_body_head'];

        $bg_pri_entry_data_detail_body_detail = $preData['bg_pri_entry_data_detail_body_detail'];

        $bped_id = Service_BgPriEntryData::add($bg_pri_entry_data);
        if($bped_id){
            //添加bg_pri_entry_data_detail_body_head

            foreach ($bg_pri_entry_data_detail_body_head as $k=>$v){

                //添加bg_pri_entry_data_detail_body_detail
                $bghead = $v;
                $bghead['bped_id'] = $bped_id;
                $bpedbh_id = Service_BgPriEntryDataDetailBodyHead::add($bghead);
                if(!$bpedbh_id){
                    throw new Exception("添加预录入数据详情表头信息失败");
                }

                $bgBodys = $bg_pri_entry_data_detail_body_detail[$k];
                foreach ($bgBodys as $kb=>$vb){
                    $bgheadDetail = $vb;
                    $bgheadDetail['bpedbh_id'] = $bpedbh_id;
                    unset($bgheadDetail['net_wt']);
                    unset($bgheadDetail['net_wt_total']);
                    /*print_r($bgheadDetail);
                    exit;*/
                    if(!Service_BgPriEntryDataDetailBodyDetail::add($bgheadDetail)){
                        throw new Exception("添加预录入数据详情表体商品信息信息失败");
                    }
                }

                $bgDatailLog = array(
                    'bped_id'=>$bped_id,
                    'bpedbh_id'=>$bpedbh_id,
                    'change_status'=>'predata',
                    'ip'=>Common_Common::getIP(),
                    'content'=>'生成预录入数据',
                    'content_all'=>json_encode($preData),
                    'add_time'=>date("Y-m-d H:i:s",time())
                );
                Service_BgPriEntryDataDetailLog::add($bgDatailLog);

                //Service_
            }
            //添加bg_pri_entry_data_detail_log
        }else{
            throw new Exception("添加预录入数据主表信息失败");
        }
    }
    /**
     * @todo 校验出区生成预录入数据
     */
    public function validatorShipBatch(){
        $validateObj = new Validate_PreDataValidate($this);
        //Common_CalculateOtherFee();
        //校验类型
        $validateObj->validatetype($this->param['type']);
        //校验关联单号类型
        $validateObj->validateSearchType($this->param['search_type']);
        //
        $validateObj->validatecodlist($this->param['codlist']);
        /*$validateObj->validaterltEntryBizopEtpsNm($this->param['rlt_entry_bizop_etps_nm']);
        $validateObj->validatedistrictCode($this->param['district_code']);
        $validateObj->validatedutyMode($this->param['duty_mode']);
        $validateObj->validateTradeAreaCode($this->param['trade_area_code']);
        $validateObj->validatedestinationPort($this->param['destination_port']);
        $validateObj->validatentyPortCode($this->param['enty_port_code']);
        $validateObj->validatewrapType($this->param['wrap_type']);*/
        $validateObj->validatebgCompany($this->param['bg_company']);
    }
    /**
     * @todo 生成预录入数据
     */
    public function createPreDataBySbcode($param){
        $this->setParam($param);
        $res = $this->saveShipBatchPreData();
        return $res;
    }
    /**
     * @todo 删除预录入数据
     */
    public function deletePreData($param){
        $this->setParam($param);
        $id = $this->param['id'];
        if($id){
            $predata = Service_BgPriEntryData::getByField($id,'bped_id');
            if(!empty($predata)){
                if($predata['mf_status']=='1'){
                    $this->error[] = "已经生成公路舱单无法删除";
                }
                if($predata['hf_status']=='1'){
                    $this->error[] = "核放单已经生成无法删除";
                }
                $heads = Service_BgPriEntryDataDetailBodyHead::getByCondition(['bped_id'=>$id]);
                if(!empty($heads)){
                    foreach ($heads as $k=>$vh){
                        if($vh['hz_status']=='1'){
                            $this->error[] = "明细的预录入数据已经生成核注无法删除:".$vh['bpd_ref_no'];
                        }
                        if($vh['bg_status']=='1'){
                            $this->error[] = "明细的预录入数据已经生成报关单无法删除:".$vh['bpd_ref_no'];
                        }
                    }
                }
            }else{
                $this->error[] = "单证无效";
            }
            //var_dump($this->error);
            if(empty($this->error)){
                Service_BgPriEntryData::delete($id,'bped_id');
                Service_BgPriEntryDataDetailBodyHead::delete($id,'bped_id');
                return true;
            }
        }else{
            $this->error[] = "参数错误";
        }
    }




}