<?php
/**
 * 订单出区核注
 * Created by PhpStorm.
 * User: boyer
 * Date: 2020/11/12
 * Time: 15:51
 */
class Clearance_InvManifestController extends Ec_Controller_Action
{
    protected $tplDirectory = '';

    public function preDispatch() {
        $this->tplDirectory = "clearance/views/inv-manifest/";
    }

    /**
     * Note:获取列表的提交参数，导出和查询都会用到，放在一个地方
     * User: Yao
     * Date: 2019/2/16
     * Time: 11:20
     */
    private function getCondition() {
        $condition = array();
        $dateFor = $this->_request->getParam('dateFor', '');
        $dateTo = $this->_request->getParam('dateTo', '');
        $isSearchDate = false;
        $conditionTemp['dateFor'] = !empty($dateFor) ? $dateFor : '';
        $conditionTemp['dateTo'] = !empty($dateTo) ? $dateTo : '';
        if (!empty($conditionTemp['dateFor'])) {
            $isSearchDate = true;
            $conditionTemp['dateFor'] = date('Y-m-d H:i:s', strtotime($conditionTemp['dateFor']));
        }
        if (!empty($conditionTemp['dateTo'])) {
            $isSearchDate = true;
            $conditionTemp['dateTo'] = date('Y-m-d H:i:s', strtotime($conditionTemp['dateTo']));
        }
        $params = $this->_request->getParams();
        Common_Common::trim_blank($params);
        $service = new Service_InvtManifiest();
        $condition = $service->getMatchFields($params);
        if ($isSearchDate) {
            $condition['dateFor'] = $conditionTemp['dateFor'];
            $condition['dateTo'] = $conditionTemp['dateTo'];
        }
        return $condition;
    }

    public function listAction() {
        if ($this->_request->isPost()) {
            $return = array(
                "state" => 0,
                "message" => "No Data"
            );
            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);

            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;
            $condition = $this->getCondition();
            $showFields = array(
                'im_id',
                'im_code',
                'im_add_time',
                'order_count',
                'im_status',
                'im_type',
                'gift_flag',
            );
            $service = new Service_InvtManifiest();
            $showFields = $service->getFieldsAlias($showFields);
            $count = Service_InvtManifiest::getByCondition($condition, 'count(*)');
            $return['total'] = $count;
            if ($count > 0) {
                $rows = Service_InvtManifiest::getByCondition($condition, $showFields, $pageSize, $page, 'im_id desc');
                $return['state'] = $count ? 1 : 0;
                $return['data'] = $rows;
            }
            $return['status'] = Service_InvtManifiest::getStatus();
            $return['type'] = Service_InvtManifiest::getImType();
            $return['size'] = $pageSize;
            $return['page'] = $page;
            die(Zend_Json::encode($return));
        }
        echo Ec::renderTpl($this->tplDirectory . "list.tpl", 'layout');
    }

    /**
     * Note:汇单创建
     * User: Yao
     * Date: 2020/4/13
     * Time: 16:14
     */
    public function createAction() {
        if ($this->_request->isPost()) {
            $return = [
                'state' => 0,
                'message' => 'fail',
                'success' => [],
                'error' => [],
            ];
            $db = Common_Common::getAdapter();
            $db->beginTransaction();
            try {
                $codeList = $this->_request->getParam('code_list');
                if (empty($codeList)) {
                    throw new Exception('单号为空');
                }
                $searchType = $this->_request->getParam('search_type');
                $codeArray = preg_split('/\n|,/', $codeList);
                $codeArray = array_map(function ($v) {
                    return preg_replace('/\r|\s/', '', $v);
                }, $codeArray);
                $codeArray = array_filter($codeArray);
                $type = $this->_request->getParam('type','');
                if(empty($type)){
                    throw new Exception('请选择类型');
                }
                $etpsInfo = $this->_request->getParam('etps_info');
                if(empty($etpsInfo)){
                    throw new Exception('请选择经营企业信息');
                }
                $invConfig = new Api_Inv_Config();
                $headConfig = $invConfig->getInvHeadConfig($etpsInfo);

                if($type == 1){
                    $invFestProcess = new Process_InvOrder();
                }elseif ($type ==3){
                    $invFestProcess = new Process_InvReturnOrder();
                }else{
                    $invFestProcess = new Process_InvExportOrder();
                }
                $invFestProcess->setHeadInfo($headConfig);
                if ($searchType == 'sb_code') {
                    $result = $invFestProcess->createMainifestBySbcode($codeArray);
                } elseif ($searchType == 'order_code') {
                    $result = $invFestProcess->createMainifestByorderCode($codeArray);
                }else{
                    throw new Exception('不存在该类型');
                }
                if($result['state'] != 1){
                    throw new Exception('创建汇单失败');
                }
                $return['success'] = $result['success'];
                $return['message'] = "创建成功：汇单号：" . $result['code'];
                $return['fail'] = array_diff($codeArray,$result['success']);
                $return['state'] = 1;
                $db->commit();
                //$db->rollBack();
            } catch (Exception $e) {
                //echo $e;
                $return['message'] = $e->getMessage();
                $db->rollBack();
            }
            die(Zend_Json::encode($return));
        }
        $this->view->type = Service_InvtManifiest::getImType();
        echo Ec::renderTpl($this->tplDirectory . 'create.tpl', 'layout');
    }

    /**
     * Note:生成核注清单信息
     * User: Yao
     * Date: 2020/11/14
     * Time: 11:05
     */
    public function makeInvAction() {
        $return = [
            'state' => 0,
            'message' => 'fail',
            'inv_code' => [],
        ];
        $db = Common_Common::getAdapter();
        $db->beginTransaction();
        try {
            $imCode = $this->_request->getParam('im_code');
            if (empty($imCode)) {
                throw new Exception('汇单号为空');
            }
            $invManifestInfo = Service_InvtManifiest::getByField($imCode, 'im_code');
            if (empty($invManifestInfo)) {
                throw new Exception('信息不存在');
            }
            if ($invManifestInfo['im_status'] != 0) {
                throw new Exception('该汇单信息已经生成核注清单，或者已经申报，不能操作');
            }
            $invOrderProcess = new Process_InvOrder();
            $invOrderProcess->makeInvByIm($invManifestInfo);
            $invCodeList = $invOrderProcess->getInvCode();
            foreach ($invCodeList as $invCode) {
                Service_InvtManifiestInvt::add([
                    'im_id' => $invManifestInfo['im_id'],
                    'etps_inner_invt_no' => $invCode,
                    'add_time' => date("Y-m-d H:i:s"),
                ]);
            }
            Service_InvtManifiest::update([
                'im_status' => 1,
                'im_update_time' => date("Y-m-d H:i:s")
            ], $invManifestInfo['im_id']);
            $log = [
                'im_id' => $invManifestInfo['im_id'],
                'operater_id' => $this->_userAuth->userId,
                'add_time' => date("Y-m-d"),
                'content' => "生成核注清单" . implode(',', $invCodeList),
                'status_from' => $invManifestInfo['im_status'],
                'status_to' => 1,
                'ip' => Common_Common::getRealIp(),
            ];
            Service_InvtManifestLog::add($log);
            $db->commit();
            $return['inv_code'] = $invCodeList;
            $return['state'] = 1;
            $return['message'] = '核注清单生成成功';
        } catch (Exception $e) {
            $return['message'] = $e->getMessage();
            $db->rollBack();
        }
        die(Zend_Json::encode($return));
    }

    /**
     * Note:查看页面
     * User: Yao
     * Date: 2020/11/18
     * Time: 17:52
     */
    public function viewAction() {
        $id = $this->_request->getParam('id');
        if (empty($id)) {
            $this->_redirect('/default/error/error');
        }
        $invtMainiFestInfo = Service_InvtManifiest::getByField($id);
        if (empty($invtMainiFestInfo)) {
            $this->_redirect('/default/error/error');
        }
        $invtManifetsInv = Service_InvtManifiestInvt::getByCondition([
            'im_id' => $invtMainiFestInfo['im_id']
        ]);
        if (!empty($invtManifetsInv)) {
            $invStatus = Service_InvtList::getStatus();
            foreach ($invtManifetsInv as $key => $inv) {
                $invInfo = Service_InvtList::getByField($inv['etps_inner_invt_no'], 'EtpsInnerInvtNo');
                $invtManifetsInv[$key]['status'] = $invInfo['status'];
                $invtManifetsInv[$key]['status_desc'] = $invStatus[$invInfo['status']];
                $invtManifetsInv[$key]['il_id'] = $invInfo['il_id'];
            }
        }
        $log = Service_InvtManifestLog::getJoinLeftByCondition([
            'im_id' => $invtMainiFestInfo['im_id']
        ],'*','','','iml_id desc');
        $this->view->invtMainiFestInfo = $invtMainiFestInfo;
        $this->view->invtManifestInv = $invtManifetsInv;
        $this->view->status = Service_InvtManifiest::getStatus();
        $this->view->invManifestLog = $log;
        echo Ec::renderTpl($this->tplDirectory . 'view.tpl', 'layout');
    }

    /**
     * Note:汇单订单信息
     * User: Yao
     * Date: 2020/11/16
     * Time: 17:14
     */
    public function invOrderListAction() {
        $return = [
            'Rows' => [],
            'total' => 0
        ];
        try {
            if ($this->_request->isPost()) {
                $id = $this->_request->getParam('im_id');
                if (empty($id)) {
                    throw new Exception('参数错误');
                }
                $page = $this->_request->getParam('page', 1);
                $pageSize = $this->_request->getParam('pagesize', 20);
                $orderCode = $this->_request->getParam('order_code', '');
                $etpsInnerInvtNo = $this->_request->getParam('etps_inner_invt_no', '');
                $pageSize = (int)$pageSize;
                $pageSize = $pageSize > 2000 ? 2000 : $pageSize;
                $condition = [
                    'im_id' => $id,
                    'order_code' => trim($orderCode),
                    'EtpsInnerInvtNo' => trim($etpsInnerInvtNo),
                ];
                $invtMainiFestInfo = Service_InvtOrderSb::getByCondition($condition, '*', $pageSize, $page);
                $count = Service_InvtOrderSb::getByCondition($condition, 'count(*)');
                $return['Rows'] = $invtMainiFestInfo;
                $return['Total'] = $count;
            }
        } catch (Exception $e) {

        }
        die(Zend_Json::encode($return));
    }

    /**
     * Note:删除订单信息
     * User: Yao
     * Date: 2020/11/17
     * Time: 11:56
     */
    public function deleteDetailAction() {
        $return = [
            'state' => 0,
            'message' => 'fail'
        ];
        try {
            if (!$this->_request->isPost()) {
                throw new Exception('非法提交');
            }
            $idList = $this->_request->getParam('id_list', '');
            if (empty($idList)) {
                throw new Exception('参数错误');
            }
            $imId = $this->_request->getParam('im_id');
            $invManifest = Service_InvtManifiest::getByField($imId);
            if (empty($invManifest)) {
                throw new Exception('汇单信息不存在');
            }
            if($invManifest['im_type'] !=1){
                throw new Exception('只有BBC类型汇单可以操作');
            }
            $deleteOrderCode = [];
            $idListArray = explode(',', $idList);
            $db = Common_Common::getAdapter();
            $invListBodyOrder = [];
            $noInvOrderSbId = [];
            $deleteNumber = 0;
            $db->beginTransaction();
            try {
                foreach ($idListArray as $id) {
                    $invOrder = Service_InvtOrderSb::getByField($id);
                    if (empty($invOrder)) {
                        throw new Exception('提交参数错误');
                    }
                    if ($invOrder['ios_status'] != -1) {
                        throw new Exception($invOrder['order_code'] . '已经申报或者申报中，无法删除');
                    }
                    $deleteOrderCode[] = $invOrder['order_code'];
                    if ($invOrder['EtpsInnerInvtNo']) {
                        $invListBodyOrder[$invOrder['EtpsInnerInvtNo']][] = $invOrder['order_code'];
                    } else {
                        $noInvOrderSbId[] = $id;
                    }
                }
                if (!empty($invListBodyOrder)) {
                    $invOrderProcess = new Process_InvOrder();
                    foreach ($invListBodyOrder as $invCode => $orderList) {
                        $deleteNumber+=count($orderList);
                        $invOrderProcess->delOrder($orderList, $invCode);
                    }
                }
                if (!empty($noInvOrderSbId)) {//没有生成核注的直接删除
                    foreach ($noInvOrderSbId as $id) {
                        $deleteNumber++;
                        Service_InvtOrderSb::delete($id);
                    }
                }
                $updateManifest = [
                    'order_count'=>$invManifest['order_count']-$deleteNumber,
                    'im_update_time'=>date("Y-m-d H:i:s")
                ];
                Service_InvtManifiest::update($updateManifest,$invManifest['im_id']);
                $log = [
                    'im_id' => $imId,
                    'operater_id' => $this->_userAuth->userId,
                    'add_time' => date("Y-m-d H:i:s"),
                    'content' => '删除订单' . implode(',', $deleteOrderCode),
                    'status_from' => $invManifest['im_status'],
                    'status_to' => $invManifest['im_status'],
                    'ip' => Common_Common::getRealIp(),
                ];
                Service_InvtManifestLog::add($log);
                $db->commit();
                if(Service_InvtManifiest::checkHasGift($imId)){
                    $updateManifest = [
                        'gift_flag'=>1,
                    ];
                    Service_InvtManifiest::update($updateManifest,$invManifest['im_id']);
                }else{
                    $updateManifest = [
                        'gift_flag'=>0,
                    ];
                    Service_InvtManifiest::update($updateManifest,$invManifest['im_id']);
                }
                $return['message'] = '删除成功';
                $return['state'] = 1;
            } catch (Exception $e) {
                $return['message'] = $e->getMessage();
                $db->rollBack();
            }

        } catch (Exception $e) {
            $return['message'] = $e->getMessage();
        }
        die(Zend_Json::encode($return));
    }

    /**
     * Note:增加订单
     * User: Yao
     * Date: 2020/11/18
     * Time: 17:51
     */
    public function addOrderAction() {
        $return = [
            'state' => 0,
            'message' => 'fail'
        ];
        try {
            if (!$this->_request->isPost()) {
                throw new Exception('非法提交');
            }
            $orderCodeList = $this->_request->getParam('add_order', '');
            if (empty($orderCodeList)) {
                throw new Exception('参数错误');
            }
            $imId = $this->_request->getParam('im_id');
            $invManifest = Service_InvtManifiest::getByField($imId);
            if (empty($invManifest)) {
                throw new Exception('汇单信息不存在');
            }
            if($invManifest['im_type'] !=1){
                throw new Exception('只有BBC汇单类型才可以操作');
            }
            $orderCodeListArray = explode(',', $orderCodeList);
            $orderCodeListArray = array_unique($orderCodeListArray);
            $db = Common_Common::getAdapter();
            $addNumber = 0;
            $db->beginTransaction();
            try {
                $errorOrder = [];
                foreach ($orderCodeListArray as $ordercode) {
                    $ftpMessageShipbatchOrder = Service_FtpMessageShipbatchOrder::getByField($ordercode, 'order_code');
                    if ($ftpMessageShipbatchOrder['unified_status'] != 6) {
                        $errorOrder[] = $ordercode;
                        continue;
                    }
                }
                if (!empty($errorOrder)) {
                    throw new Exception(implode(',', $errorOrder) . '不是放行状态');
                }
                $hasInvSendCode = Service_InvtOrderSb::getByCondition([
                    'order_code_list' => $orderCodeListArray,
                    'osb_type'=>1,
                    'ios_status_neq' => 3,
                ], 'order_code');
                if (!empty($hasInvSendCode)) {
                    foreach ($hasInvSendCode as $code) {
                        $errorOrder[] = $code['order_code'];
                    }
                }
                if (!empty($errorOrder)) {
                    throw new Exception(implode(',', $errorOrder) . '已经生成核注清单，不能添加，请先作废');
                }
                $invtList = Service_InvtManifiestInvt::getByCondition([
                    'im_id' => $invManifest['im_id'],
                ]);
                if (!empty($invtList)) {//已经生成核注清单的
                    $invOrderProcess = new Process_InvOrder();
                    $invCanAddOrder = [];//每个核注清单可以添加的订单
                    $start = 0;
                    foreach ($invtList as $invt) {
                        $invtNo = $invt['etps_inner_invt_no'];
                        $max = Service_InvtOrderSb::getByCondition([
                            'EtpsInnerInvtNo' => $invtNo,
                            'ios_status_neq' => 3,
                        ], 'count(*)');
                        if ($invOrderProcess->getMaxOrderNumber() > $max) {
                            $canAddOrder = array_slice($orderCodeListArray, $start, $invOrderProcess->getMaxOrderNumber() - $max);
                            if(empty($canAddOrder)) {
                                break;
                            }
                            $invCanAddOrder[$invtNo] = $canAddOrder;
                            $start += $invOrderProcess->getMaxOrderNumber() - $max;
                        }
                    }
                    if ($left = array_slice($orderCodeListArray, $start, 1)) {
                        throw new Exception('此汇单已经生成核注，添加的订单数量已经超出可以添加的最大数量');
                    }
                    foreach ($invCanAddOrder as $invNo => $value) {
                        $invOrderProcess->addOrder($value, $invNo);
                        $addNumber+=count($value);
                    }
                } else {//还没有生成核注清单，直接插入订单
                    foreach ($orderCodeListArray as $order) {
                        $addNumber++;
                        $orderInfo = Service_Orders::getByField($order, 'order_code');
                        $ftpMessageShipbatchOrder = Service_FtpMessageShipbatchOrder::getByField($order, 'order_code');
                        Service_InvtOrderSb::add([
                            'im_id' => $invManifest['im_id'],
                            'order_code' => $orderInfo['order_code'],
                            'tracking_number' => $orderInfo['ref_tracking_number'],
                            'reference_no' => $orderInfo['reference_no'],
                            'form_id_xml' => $ftpMessageShipbatchOrder['form_id_xml'],
                            'form_id_port' => $ftpMessageShipbatchOrder['form_id_port'],
                            'sb_code' => $ftpMessageShipbatchOrder['sb_code'],
                            'add_time' => date("Y-m-d H:i:s")
                        ]);
                    }
                }

                $updateManifest = [
                    'order_count'=>$invManifest['order_count']+$addNumber,
                    'im_update_time'=>date("Y-m-d H:i:s")
                ];
                Service_InvtManifiest::update($updateManifest,$invManifest['im_id']);
                $log = [
                    'im_id' => $imId,
                    'operater_id' => $this->_userAuth->userId,
                    'add_time' => date("Y-m-d H:i:s"),
                    'content' => '添加订单' . implode(',', $orderCodeListArray),
                    'status_from' => $invManifest['im_status'],
                    'status_to' => $invManifest['im_status'],
                    'ip' => Common_Common::getRealIp(),
                ];
                Service_InvtManifestLog::add($log);
                $db->commit();
                if(Service_InvtManifiest::checkHasGift($imId)){
                    $updateManifest = [
                        'gift_flag'=>1,
                    ];
                    Service_InvtManifiest::update($updateManifest,$invManifest['im_id']);
                }
                $return['message'] = '添加成功';
                $return['state'] = 1;
            } catch (Exception $e) {
                $return['message'] = $e->getMessage();
                $db->rollBack();
            }
        } catch (Exception $e) {
            $return['message'] = $e->getMessage();
        }
        die(Zend_Json::encode($return));
    }
    /**
     * Note:导出非金二商品
     * User: Yao
     * Date: 2021/5/5
     * Time: 11:05
     */
    public function exportEntAction(){
        $imCode = $this->_request->getParam('im_code');
        require_once "PHPExcel.php";
        require_once "PHPExcel/IOFactory.php";
        $path = APPLICATION_PATH.'/../data/xls/inv_ent_import.xls';
        $excel = PHPExcel_IOFactory::load($path);
        $companyInfo = Process_InvtSb::getCompanyInfo();
        $sheet = $excel->getSheet(0);

        $sheet->setCellValue('B2','2');//货物流向
        $sheet->setCellValue('C2','O');//业务类型
        $sheet->setCellValue('D2','0');//进出标记
        $sheet->setCellValue('E2','5225');//进境口岸
        $sheet->setCellValue('F2','5257');//监管场所代码
        $sheet->setCellValue('H2','FB52252161005001');//辅助系统账册编号
        $sheet->setCellValue('J2','4');//区域/场所类型
        $sheet->setCellValue('M2',$companyInfo['area_code']);//区内经营单位编码
        $sheet->setCellValue('N2',$companyInfo['company_name']);//区内经营单位名称
        $sheet->setCellValue('Q2','叶培山');//申请人姓名
        $sheet->setCellValue('S2',$companyInfo['area_code']);//收发货单位代码
        $sheet->setCellValue('T2',$companyInfo['company_name']);//收发货单位名称
        $sheet->setCellValue('U2',date("Y-m-d"));//进出口日期
        $sheet->setCellValue('AA2',date("Y-m-d H:i:s"));//申报时间
        $sheet2 = $excel->getSheet(1);;
        $sheet3 = $excel->createSheet();
        $sheet4 = $excel->createSheet();
        $sheet4->setTitle('订单数据');
        $sheet4->setCellValue('A1','订单号');
        $sheet4->setCellValue('B1','交易单号');
        $sheet3->setTitle('赠品信息');

        $sheet3->setCellValue('A1','商品名称');
        $sheet3->setCellValue('B1','商品条码');
        $sheet3->setCellValue('C1','商品sku');
        $sheet3->setCellValue('D1','商品数量');
        $sheet3->setCellValue('E1','法一数量');
        $sheet3->setCellValue('F1','规格型号');
        $sheet3->setCellValue('G1','商品料号');
        $sheet3->setCellValue('H1','海关编码');
        $sheet3->setCellValue('I1','海关品名');
        $sheet4Index = 2;
        if($imCode){
            $invManifest = Service_InvtManifiest::getByField($imCode,'im_code');
            $invOrderSb = Service_InvtOrderSb::getByCondition([
                'im_id'=>$invManifest['im_id']
            ]);
            if(!empty($invManifest)){
                Service_InvtManifestLog::add([
                    'im_id'=>$invManifest['im_id'],
                    'operater_id'=>Service_User::getUserId(),
                    'add_time'=>date("Y-m-d H:i:s"),
                    'content'=>'导出非金二核注清单',
                    'ip'=>Common_Common::getRealIp(),
                    'status_from'=>$invManifest['im_status'],
                    'status_to'=>$invManifest['im_status'],
                ]);
            }
            $mergeProduct =[];
            foreach ($invOrderSb as $invSb){
                $orderProduct =Service_OrderProduct::getLeftJoinProduct([
                    'order_code'=>$invSb['order_code'],
                    'gift_flag'=>1,
                ],['op.*','p.product_title','p.hs_code','p.hs_goods_name',
                    'p.goods_id','p.product_sku','p.product_barcode','p.special'
                ]);
                if($orderProduct){
                    $orderInfo = Service_Orders::getByField($invSb['order_code'],'order_code','reference_no');
                    $sheet4->setCellValue('A'.$sheet4Index,$invSb['order_code']);
                    $sheet4->setCellValue('B'.$sheet4Index,$orderInfo['reference_no']);
                    $sheet4Index++;
                    foreach ($orderProduct as $opProduct){
                        if(!$mergeProduct[$opProduct['product_id']]){
                            $mergeProduct[$opProduct['product_id']] = $opProduct;
                        }else{
                            $mergeProduct[$opProduct['product_id']]['op_quantity'] += $opProduct['op_quantity'];
                        }
                    }
                }
            }

            if(!empty($mergeProduct)){
                $sheet2Index = 2;
                $goodsIndex =1 ;
                $dacuInfo = [];
                foreach ($mergeProduct as $mproduct){
                    $recode = Service_BillBook::getJoinLeftDetailBycondition([
                        'product_id'=>$mproduct['product_id']
                    ]);
                    $quantity  = $mproduct['op_quantity'];
                    $recodeList=[];
                    foreach ($recode as $bill){
                        if($quantity==0){
                            break;
                        }
                        if($quantity>=$bill['can_use_quantity']){
                            $quantity -=$bill['can_use_quantity'];
                            $recodeList[]=[
                                'recode'=>$bill,
                                'quantity'=>$bill['can_use_quantity']
                            ];
                        }else{
                            $recodeList[]=[
                                'recode'=>$bill,
                                'quantity'=>$quantity
                            ];
                            $quantity =0;
                        }
                    }
                    $productUom = Service_HsUomMap::getByField($mproduct['product_id'], 'product_id');
                    if(!empty($recodeList)) {
                        foreach ($recodeList as $rc) {
                            $sheet2->setCellValueExplicit('A' . $sheet2Index, $goodsIndex);//商品序号
                            $sheet2->setCellValueExplicit('B' . $sheet2Index, $rc['recode']['recorde_no']);//账册项号
                            $sheet2->setCellValueExplicit('C' . $sheet2Index, $rc['recode']['hs_code']);//商品编码
                            $sheet2->setCellValueExplicit('D' . $sheet2Index, $rc['recode']['product_title']);//商品名称
                            $sheet2->setCellValueExplicit('E' . $sheet2Index, $rc['recode']['specification']);//规格型号
                            $sheet2->setCellValueExplicit('F' . $sheet2Index, $rc['recode']['country_code']);//产销国
                            $sheet2->setCellValueExplicit('G' . $sheet2Index, $rc['recode']['decalar_currency']);//成交币制
                            $sheet2->setCellValueExplicit('H' . $sheet2Index, $rc['recode']['decalar_price']);//申报单价
                            $sheet2->setCellValueExplicit('I' . $sheet2Index, $rc['recode']['decalar_price'] * $rc['quantity']);//申报总价
                            $sheet2->setCellValueExplicit('J' . $sheet2Index, $rc['quantity']);//申报数量
                            // $sheet2->setCellValueExplicit('K'.$sheet2Index,$mproduct['use_away']);//用途
                            $sheet2->setCellValueExplicit('M' . $sheet2Index, $rc['recode']['decalare_unit']);//申报单位
                            $sheet2->setCellValueExplicit('N' . $sheet2Index, sprintf("%.5f", $productUom['hum_quantity_law'] * $rc['quantity']));//法定数量
                            $sheet2->setCellValueExplicit('O' . $sheet2Index, $rc['recode']['legal_unit']);//法定单位
                            $sheet2->setCellValueExplicit('P' . $sheet2Index, $rc['recode']['bill_no']);//关联进区申请单编号
                            $sheet2->setCellValueExplicit('Q' . $sheet2Index, $rc['recode']['bill_serial']);//关联进区商品序号
                            //$dacuInfo[] = $rc['recode']['hs_goods_name'] . '*' . $rc['quantity'];
                            // '用途',
                            // '征免免税方式',
                            // '申报单位',
                            // '法定数量',
                            // '法定单位',
                            // '关联进区申请单编号',
                            // '关联进区商品序号',
                            // '报关单商品序号',
                            // 'H2000商品序号',
                            // 'H2000表体类型',
                            // '备注',
                            $sheet2Index++;
                            $goodsIndex++;
                        }
                    }else{
                        $sheet2->setCellValueExplicit('A' . $sheet2Index, $goodsIndex);//商品序号
                        $sheet2->setCellValueExplicit('B' . $sheet2Index, $mproduct['product_barcode']);//账册项号
                        $sheet2->setCellValueExplicit('C' . $sheet2Index, '赠品账册信息不存在');//商品编码
                        $sheet2Index++;
                        $goodsIndex++;
                    }
                }
                //商品信息
                $shee3Index = 2;
                foreach ($mergeProduct as $mproduct){
                    $hsUomMap = Service_HsUomMap::getByField($mproduct['product_id'],'product_id');
                    $sheet3->setCellValue('A'.$shee3Index,$mproduct['product_title']);
                    $sheet3->setCellValueExplicit('B'.$shee3Index,$mproduct['product_barcode'],PHPExcel_Cell_DataType::TYPE_STRING);
                    $sheet3->setCellValueExplicit('C'.$shee3Index,$mproduct['product_sku'],PHPExcel_Cell_DataType::TYPE_STRING);
                    $sheet3->setCellValue('D'.$shee3Index,$mproduct['op_quantity']);
                    $sheet3->setCellValue('E'.$shee3Index,$hsUomMap['hum_quantity_law']);
                    $sheet3->setCellValue('F'.$shee3Index,$mproduct['special']);
                    $sheet3->setCellValue('G'.$shee3Index,$mproduct['goods_id']);
                    $sheet3->setCellValueExplicit('H'.$shee3Index,$mproduct['hs_code'],PHPExcel_Cell_DataType::TYPE_STRING);
                    $sheet3->setCellValue('I'.$shee3Index,$mproduct['hs_goods_name']);
                    $dacuInfo[] = $mproduct['hs_goods_name'] . '*' . $mproduct['op_quantity'];
                    $shee3Index++;
                }
                $sheet3->mergeCells("A".$shee3Index.':B'.$shee3Index);
                $sheet3->setCellValue('A'.$shee3Index,implode("|",$dacuInfo));
            }
        }
        $filename = date("Y-m-d").mt_rand(100,999).'非金二核注清单信息.xls';
        $filename = mb_convert_encoding($filename,'gbk');
        $writer = PHPExcel_IOFactory::createWriter($excel,'Excel5');
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Type: application/force-download');
        header("Content-Disposition: attachment;filename=\"$filename\"");
        header("Content-Transfer-Encoding: binary");
        header('Cache-Control: max-age=0');
        $writer->save('php://output');
    }

}