<?php

class Service_InvtList extends Common_Service
{
    /**
     * @var null
     */
    public static $_modelClass = null;

    /**
     * @return Table_Bank|null
     */
    public static function getModelInstance() {
        if (is_null(self::$_modelClass)) {
            self::$_modelClass = new Table_InvtList();
        }
        return self::$_modelClass;
    }

    /**
     * @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 = "il_id") {
        $model = self::getModelInstance();
        return $model->update($row, $value, $field);
    }

    /**
     * @param $value
     * @param string $field
     * @return mixed
     */
    public static function delete($value, $field = "il_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 = 'il_id', $colums = "*") {
        $model = self::getModelInstance();
        return $model->getByField($value, $field, $colums);
    }

    public static function getForLock($value, $field = 'il_id', $colums = "*") {
        $model = self::getModelInstance();
        return $model->getForLock($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 getLeftJoinByCondition($condition = array(), $type = '*', $pageSize = 0, $page = 1, $order = "") {
        $model = self::getModelInstance();
        return $model->getLeftJoinByCondition($condition, $type, $pageSize, $page, $order);
    }
    /**
     * @param $val
     * @return array
     */
    public static function validator($val) {
        $validateArr = $error = array();

        return Common_Validator::formValidator($validateArr);
    }

    /**
     * Note:申报类型
     * User: Yao
     * Date: 2020/8/8
     * Time: 9:31
     * @return array
     */
    public static function getdclTypecdStatus() {
        return [
            '1' => '新增'
        ];
    }

    /**
     * Note:底账类型
     * User: Yao
     * Date: 2020/8/8
     * Time: 14:24
     * @return array
     */
    public static function getbwlType() {
        return [
            '0' => '物流底账',
            '1' => 'E账册',
        ];
    }

    /**
     * Note:清单类型
     * User: Yao
     * Date: 2020/8/8
     * Time: 14:25
     */
    public static function getInvtType() {
        return [
            '0' => '普通清单',
            '3' => '先入区后报关',
            '4' => '简单加工',
            '5' => '保税展示交易',
            '6' => '区内流转',
            '7' => '区港联动',
            '8' => '保税电商',
            '9' => '一纳成品内销'

        ];
    }

    /**
     * Note:监管方式
     * User: Yao
     * Date: 2020/8/8
     * Time: 14:32
     * @return array
     */
    public static function getsupvModecd() {
        return [
            '0110' => '一般贸易',
            '0130' => '易货贸易',
            '0139' => '旅游购物商品',
            '0200' => '料件销毁',
            '0214' => '来料加工',
            '0245' => '来料料件内销',
            '0255' => '来料深加工',
            '0258' => '来料余料结转',
            '0265' => '来料料件复出',
            '0300' => '来料料件退换',
            '0314' => '加工专用油',
            '0320' => '不作价设备',
            '0345' => '来料成品减免',
            '0400' => '边角料销毁',
            '0420' => '加工贸易设备',
            '0444' => '保区进料成品',
            '0445' => '保区来料成品',
            '0446' => '加工设备内销',
            '0456' => '加工设备结转',
            '0466' => '加工设备退运',
            '0500' => '减免设备结转',
            '0513' => '补偿贸易',
            '0544' => '保区进料料件',
            '0545' => '保区来料料件',
            '0615' => '进料对口',
            '0642' => '进料以产顶进',
            '0644' => '进料料件内销',
            '0654' => '进料深加工',
            '0657' => '进料余料结转',
            '0664' => '进料料件复出',
            '0110' => '一般贸易',
            '0130' => '易货贸易',
            '0139' => '旅游购物商品',
            '0200' => '料件销毁',
            '0214' => '来料加工',
            '0245' => '来料料件内销',
            '0255' => '来料深加工',
            '0258' => '来料余料结转',
            '0265' => '来料料件复出',
            '0300' => '来料料件退换',
            '0314' => '加工专用油',
            '0320' => '不作价设备',
            '0345' => '来料成品减免',
            '0400' => '边角料销毁',
            '0420' => '加工贸易设备',
            '0444' => '保区进料成品',
            '0445' => '保区来料成品',
            '0446' => '加工设备内销',
            '0456' => '加工设备结转',
            '0466' => '加工设备退运',
            '0500' => '减免设备结转',
            '0513' => '补偿贸易',
            '0544' => '保区进料料件',
            '0545' => '保区来料料件',
            '0615' => '进料对口',
            '0642' => '进料以产顶进',
            '0644' => '进料料件内销',
            '0654' => '进料深加工',
            '0657' => '进料余料结转',
            '0664' => '进料料件复出',
            '0700' => '进料料件退换',
            '0715' => '进料非对口',
            '0744' => '进料成品减免',
            '0815' => '低值辅料',
            '0844' => '进料边角料内销',
            '0845' => '来料边角料内销',
            '0864' => '进料边角料复出',
            '0865' => '来料边角料复出',
            '1039' => '市场采购',
            '1139' => '国轮油物料',
            '1200' => '保税间货物',
            '1210' => '保税电商',
            '1215' => '保税工厂',
            '1233' => '保税仓库货物',
            '1234' => '保税区仓储转口',
            '1239' => '保税电商A',
            '1300' => '修理物品',
            '1371' => '保税维修',
            '1427' => '出料加工',
            '1500' => '租赁不满1年',
            '1523' => '租赁贸易',
            '1616' => '寄售代销',
            '1741' => '免税品',
            '1831' => '外汇商品',
            '2025' => '合资合作设备',
            '2210' => '对外投资',
            '2225' => '外资设备物品',
            '2439' => '常驻机构公用',
            '2600' => '暂时进出货物',
            '2700' => '展览品',
            '2939' => '陈列样品',
            '3010' => '货样广告品',
            '3039' => '货样广告品Ｂ',
            '3100' => '无代价抵偿',
            '3239' => '零售电商',
            '3339' => '其他进出口免费',
            '3410' => '承包工程进口',
            '3422' => '对外承包出口',
            '3511' => '援助物资',
            '3611' => '无偿军援',
            '3612' => '捐赠物资',
            '3910' => '军事装备',
            '4019' => '边境小额',
            '4039' => '对台小额',
            '4139' => '对台小额商品交易市场',
            '4200' => '驻外机构运回',
            '4239' => '驻外机构购进',
            '4400' => '来料成品退换',
            '4500' => '直接退运',
            '4539' => '进口溢误卸',
            '4561' => '退运货物',
            '4600' => '进料成品退换',
            '5000' => '料件进出区',
            '5010' => '特殊区域研发货物',
            '5014' => '区内来料加工',
            '5015' => '区内进料加工货物',
            '5033' => '区内仓储货物',
            '5034' => '区内物流货物',
            '5100' => '成品进出区',
            '5200' => '区内边角调出',
            '5300' => '设备进出区',
            '5335' => '境外设备进区',
            '5361' => '区内设备退运',
            '6033' => '物流中心进出境货物',
            '9600' => '内贸货物跨境运输',
            '9610' => '电子商务',
            '9639' => '海关处理货物',
            '9700' => '后续补税',
            '9739' => '其他贸易',
            '9800' => '租赁征税',
            '9839' => '留赠转卖物品',
            '9900' => '其他',
            'AAAA' => '调整库存核注清单',
            'BBBB' => '设备解除监管核注清单',
        ];
    }

    /**
     * Note:运输方式
     * User: Yao
     * Date: 2020/8/8
     * Time: 14:34
     * @return array
     */
    public static function getTrspMethod() {
        return [
            '0' => '非保税区',
            '1' => '监管仓库',
            '2' => '水路运输',
            '3' => '铁路运输',
            '4' => '公路运输',
            '5' => '航空运输',
            '6' => '邮件运输',
            '7' => '保税区',
            '8' => '保税仓库',
            '9' => '其它运输方式',
            'A' => '全部运输方式',
            'H' => '边境特殊海关作业区',
            'T' => '综合实验区',
            'W' => '物流中心',
            'X' => '物流园区',
            'Y' => '保税港区',
            'Z' => '出口加工区',

        ];
    }

    /**
     * Note:进出口标记
     * User: Yao
     * Date: 2020/8/8
     * Time: 9:32
     * @return array
     */
    public static function getImepexpMarkcdStatus() {
        return [
            'I' => '进口',
            'E' => '出口'
        ];
    }

    /**
     * Note:核注清单状态
     * User: Yao
     * Date: 2020/8/8
     * Time: 9:36
     * @return array
     */
    public static function getStatus() {
        return [
            '0' => '取消',
            '1' => '草稿',
            '2' => '确认',
            '3' => '异常',
            '4' => '完成'
        ];
    }

    /**
     * Note:报关标记
     * User: Yao
     * Date: 2020/8/8
     * Time: 14:36
     * @return array
     */
    public static function getDclusFlag() {
        return [
            '1' => '报关',
            '2' => '非报关'
        ];
    }

    /**
     * Note:料件成品标记
     * User: Yao
     * Date: 2020/8/8
     * Time: 14:44
     * @return array
     */
    public static function getMtpckEndprdMarkd() {
        return [
            'I' => '料件',
            'E' => '成品',
        ];
    }

    /**
     * Note:进出口标记
     * User: Yao
     * Date: 2020/8/8
     * Time: 14:46
     * @return array
     */
    public static function getImexpMarkcd() {
        return [
            'I' => '进口',
            'E' => '出口',
        ];
    }

    /**
     * Note:综保系统状态
     * User: Yao
     * Date: 2020/12/2
     * Time: 16:01
     */
    public static function getZbStatus() {
        return [
            '1' => '通过（已核扣）',
            '2' => '转人工',
            '3' => '退单',
            '4' => '预核扣',
            '5' => '通过（未核扣）',
            'Y' => '入库成功',
            'Z' => '-入库失败',
        ];
    }

    /**
     * Note:报关类型
     * User: Yao
     * Date: 2021/8/2
     * Time: 16:16
     */
    public static function getDclcusType() {
        return [
            "1" => '关联报关单',
            "2" => '对应报关单',
        ];
    }
    /**
     * Note:报关单类型
     * User: Yao
     * Date: 2021/8/2
     * Time: 16:46
     * @return array
     */
    public static function getDecType() {
        return [
            '1' => '进口报关单',
            '2' => '出口报关单',
            '3' => '进境备案清单',
            '4' => '出境备案清单',
            '5' => '进境两单一审备案清单',
            '6' => '进境两单一审备案清单',
            '7' => '进境备案清单（简化）',
            '8' => '出境备案清单（简化）',
            '9' => '转关提前进口报关单',
            'A' => '转关提前出口报关单',
            'X' =>'进口两步申报报关单',
            'B'=>'转关提前进境备案清单',
            'C'=>'转关提前出境备案清单',
            'Y'=>'进口两步申报备案清单',
            //F:出口二次转关单
            //G:进口提前/工厂验放报关单
            //H:出口提前/工厂验放报关单
            //I:进口提前/暂时进口报关单
            //J:出口提前/暂时出口报关单
            //K:进口提前/中欧班列报关单
            //L:出口提前/中欧班列报关单
            //M:出口提前/市场采购报关单
            //N:出口提前/空运联程报关单
            //O:进口提前/工厂验放备案清单
            //P:出口提前/工厂验放备案清单
            //Q:进口提前/暂时进口备案清单
            //R:出口提前/暂时出口备案清单
            //S:进口提前/中欧班列备案清单
            //T:出口提前/中欧班列备案清单
            //U:出口提前/市场采购备案清单
            //V:出口提前/空运联程备案清单
        ];
    }

    /**
     * Note:进出境关别
     * User: Yao
     * Date: 2020/8/8
     * Time: 14:49
     * @return array
     */
    public static function getImexpPortcd() {
        /*return[
            '5301'=>'皇岗海关',
            '5225'=>'虎门综保',
            '5216'=>'沙田梅关',
            '3105'=>'甬保税区',
            '5208'=> '穗东海关',
            '5345'=>'深圳湾',
        ];*/
        $ports = array();
        $ieports = Service_IePort::getByCondition(array());
        if (!empty($ieports)) {
            foreach ($ieports as $k => $ieport) {
                $ports[$ieport['ie_port']] = $ieport['ie_port_name'] . "({$ieport['ie_port']})";
            }
        }
        return $ports;
    }

    /**
     * Note：是否生成报关单
     * User: Yao
     * Date: 2020/8/8
     * Time: 14:52
     * @return array
     */
    public static function getGenDecFlag() {
        return [
            '1' => '是',
            '2' => '否',
        ];
    }

    /**
     * @param array $params
     * @return array
     */
    public function getFields() {
        $row = array(
            'E0' => 'il_id',
            'E1' => 'BondInvtNo',
            'E2' => 'SeqNo',
            'E3' => 'PutrecNo',
            'E4' => 'EtpsInnerInvtNo',
            'E5' => 'BizopEtpsSccd',
            'E6' => 'BizopEtpsno',
            'E7' => 'BizopEtpsNm',
            'E8' => 'RcvgdEtpsno',
            'E9' => 'RvsngdEtpsSccd',
            'E10' => 'RcvgdEtpsNm',
            'E11' => 'DclEtpsSccd',
            'E12' => 'DclEtpsno',
            'E13' => 'DclEtpsNm',
            'E14' => 'InvtDclTime',
            'E15' => 'EntryDclTime',
            'E16' => 'EntryNo',
            'E17' => 'RltInvtNo',
            'E18' => 'RltPutrecNo',
            'E19' => 'RltEntryNo',
            'E20' => 'RltEntryBizopEtpsSccd',
            'E21' => 'RltEntryBizopEtpsno',
            'E22' => 'RltEntryBizopEtpsNm',
            'E23' => 'RltEntryRvsngdEtpsSccd',
            'E24' => 'RltEntryRcvgdEtpsno',
            'E25' => 'RltEntryRcvgdEtpsNm',
            'E26' => 'RltEntryDclEtpsSccd',
            'E27' => 'RltEntryDclEtpsno',
            'E28' => 'RltEntryDclEtpsNm',
            'E29' => 'ImpexpPortcd',
            'E30' => 'DclPlcCuscd',
            'E31' => 'ImpexpMarkcd',
            'E32' => 'MtpckEndprdMarkcd',
            'E33' => 'SupvModecd',
            'E34' => 'TrspModecd',
            'E35' => 'DclcusFlag',
            'E36' => 'DclcusTypecd',
            'E37' => 'VrfdedMarkcd',
            'E38' => 'InvtIochkptStucd',
            'E39' => 'PrevdTime',
            'E40' => 'FormalVrfdedTime',
            'E41' => 'ApplyNo',
            'E42' => 'ListType',
            'E43' => 'InputCode',
            'E44' => 'InputCreditCode',
            'E45' => 'InputName',
            'E46' => 'IcCardNo',
            'E47' => 'InputTime',
            'E48' => 'ListStat',
            'E49' => 'CorrEntryDclEtpsSccd',
            'E50' => 'CorrEntryDclEtpsNo',
            'E51' => 'CorrEntryDclEtpsNm',
            'E52' => 'DecType',
            'E53' => 'StshipTrsarvNatcd',
            'E54' => 'InvtType',
            'E55' => 'EntryStucd',
            'E56' => 'PassportUsedTypeCd',
            'E57' => 'Rmk',
            'E58' => 'DclTypecd',
            'E59' => 'NeedEntryModified',
            'E60' => 'LevyBlAmt',
            'E61' => 'ChgTmsCnt',
            'E62' => 'GenDecFlag',
            'E63' => 'add_time',
            'E64' => 'status',
            'E65' => 'zb_status',
            'E66' =>'batch_code',
        );
        return $row;
    }

}