<?php
/**
 * Created by JetBrains PhpStorm.
 * User: Administrator
 * Date: 18-1-24
 * Time: 下午2:44
 * To change this template use File | Settings | File Templates.
 */
require_once 'config.php';

$flag = APPLICATION_PATH . '/../data/log/EportXmlRenderCron.lock';

/*if (@file_exists($flag)) {
    echo '[', date('Y-m-d H:i:s'), "] Another process is running\r\n";
    echo "{$flag}\r\n";
    exit();
}

$handler = fopen($flag, 'wb');
fclose($handler);*/

echo '[', date('Y-m-d H:i:s'), '] Start', "\r\n";

$xmlDir = '/home/webcode/export/wms/data/DZKA/';
$backup = '/home/webcode/export/wms/data/DZKA_BACKUP/';
/*$db     = Common_Common::getAdapter();
$sql    = 'SELECT * FROM eport_logistics_xml WHERE warehouse_id=0 AND xml_status=0';
$result = $db->query($sql);
$total  = 0;*/
$condition = array(
    'xml_status'=>'0',
);
$epxList = Service_EportLogisticsXml::getByCondition($condition,"*");
//var_dump($epxList);
foreach($epxList as $key=>$eport){
    //++$total;
    $currentTime   = time();
    $operationTime = date('Y-m-d H:i:s', $currentTime);
    $operationDate = date('Y/m/d', $currentTime);
    $response      = Service_EportLogisticsXmlProcess::renderXml($eport);
    var_dump($response);

    if ($response['status']) {
        if (Service_Customer::isTestAccount($eport['customer_code'])) { // 测试账号不推送
            echo sprintf('[%s] 订单[%s]生成报文成功[测试账号]', $operationTime, $eport['order_code']), "\r\n";

            Service_EportLogisticsXml::update(array(
                'message_id'      => $response['message_id'],
                'guid'            => $response['guid'],
                'xml_status'      => Service_EportLogisticsXmlProcess::STATUS_ACCEPTED,
                'sended_xml_path' => '',
                'updated_time'    => $operationTime,
                'return_time'     => $operationTime,
                'return_info'     => '测试账号直接进入[海关入库]状态',
            ), $eport['elx_id'], 'elx_id');

            Service_EportXmlLog::insert(array(
                'order_code'      => $eport['order_code'],
                'tracking_number' => $eport['tracking_number'],
                'xml_type'        => $eport['xml_type'],
                'xml_path'        => '',
                'created_time'    => $operationTime,
                'return_info'     => '测试账号直接进入[海关入库]状态',
            ));

            continue ;
        }

        umask(0);

        if (FALSE !== file_put_contents($xmlDir . $response['xml_name'] . '.xml', $response['xml_content'], LOCK_EX)) {
            if (!is_dir($backup . $operationDate)) {
                @mkdir($backup . $operationDate, 0777, TRUE);
            }

            file_put_contents($backup . $operationDate . '/' . $response['xml_name'] . '.xml', $response['xml_content'], LOCK_EX);
            chmod($xmlDir . $response['xml_name'] . '.xml', 0777);
            chmod($backup . $operationDate . '/' . $response['xml_name'] . '.xml', 0777);

            Service_EportLogisticsXml::update(array(
                'message_id'      => $response['message_id'],
                'guid'            => $response['guid'],
                'xml_status'      => Service_EportLogisticsXmlProcess::STATUS_AUDITING,
                'sended_xml_path' => '/' . $operationDate . '/' . $response['xml_name'] . '.xml',
                'updated_time'    => $operationTime,
                'return_time'     => $operationTime,
                'return_info'     => '生成报文成功',
            ), $eport['elx_id'], 'elx_id');

            /*Service_EportXmlLog::insert(array(
                'order_code'      => $eport['order_code'],
                'tracking_number' => $eport['tracking_number'],
                'xml_type'        => $eport['xml_type'],
                'xml_path'        => '/' . $operationDate . '/' . $response['xml_name'] . '.xml',
                'created_time'    => $operationTime,
                'return_info'     => '生成报文[' . $response['xml_name'] . '.xml]成功',
            ));*/

            /*if (0 === (int) $eport['xml_type']) {
              $ftpOrder = Service_FtpMessageShipbatchOrder::getByField($eport['order_code'], 'order_code');

              if (!empty($ftpOrder) && 0 === (int) $ftpOrder['fml_status']) {
                Service_FtpMessageShipbatchOrder::update(array(
                  'fml_status'      => 1,
                  'fml_update_time' => $operationTime,
                ), $ftpOrder['fmso_id'], 'fmso_id');
              }
            }*/

            echo sprintf('[%s] 订单[%s]报文类型[%s]生成报文成功[%s.xml]', $operationTime, $eport['order_code'], $eport['xml_type'], $response['xml_name']), "\r\n";
        }
        else {
            Service_EportLogisticsXml::update(array(
                'updated_time' => $operationTime,
                'return_time'  => $operationTime,
                'return_info'  => '生成报文无法保存',
            ), $eport['elx_id'], 'elx_id');

            echo sprintf('[%s] 订单[%s]报文类型[%s]生成报文无法保存', $operationTime, $eport['order_code'], $eport['xml_type']), "\r\n";
        }
    }
    else {
        Service_EportLogisticsXml::update(array(
            'updated_time' => $operationTime,
            'return_time'  => $operationTime,
            'return_info'  => $response['message'],
        ), $eport['elx_id'], 'elx_id');

        echo sprintf('[%s] 订单[%s]报文类型[%s]不受支持', $operationTime, $eport['order_code'], $eport['xml_type']), "\r\n";
    }
}
// 没有队列需要处理
if (!$total) {
    echo "Nothing to do\r\n";
}

echo '[', date('Y-m-d H:i:s'), '] End', "\r\n";
@unlink($flag);