<?php
/**
 * Created by JetBrains PhpStorm.
 * User: user
 * Date: 14-10-13
 * Time: 下午6:42
 * To change this template use File | Settings | File Templates.
 */
require_once 'config.php';

$flag = APPLICATION_PATH . '/../data/log/autoAsnETK.lock';

if (@file_exists($flag)) {
    echo "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'), '] Starting.', "\r\n";
$ApiSign = "CSCMe_10ac44eb0d863fd1b86fae6daaf95fab";
// 从订单反推ASN，更具目的性，提高性能
$condition = array(
    'sm_code'                 => 'SZY-ETK', // 运输方式
    'order_status'            => 4, // 订单状态：已提交
    'order_mode_type'         => 1, // 集货模式
);
$total   = Service_Orders::getByCondition($condition, 'count(*)');
$size    = 20;
$maxPage = ceil($total / $size);

for ($i = 0; $i < $maxPage; ++$i) {
    $orderList = Service_Orders::getByCondition($condition, '*', $size, $i + 1, 'order_id DESC');

    foreach ($orderList as $order) {
        // 数据过滤
        if ('SZY-ETK' !== trim($order['sm_code'])
            || 1 !== (int) $order['order_mode_type']
            || 4 !== (int) $order['order_status']
            || '' !== trim($order['ref_tracking_number'])) {
            continue ;
        }

        $receivingDetail = Service_ReceivingOrderDetail::getByCondition(array(
            'order_code' => $order['order_code'],
        ));

        // 没有提取到数据或不是在途、收货中状态，继续下一轮
        if (empty($receivingDetail) || !in_array((int) $receivingDetail[0]['rd_status'], array(0, 1), TRUE)) {
            continue ;
        }

        $receiving = Service_Receiving::getByField((int) $receivingDetail[0]['receiving_id'], 'receiving_id');

        // 提取不到数据或不是集货ASN或状态不在待审核、已审核、在途、收货中状态之中，继续下一轮
        if (empty($receiving) || 1 !== (int) $receiving['receive_model_type'] || !in_array((int) $receiving['receiving_status'], array(3, 4, 5, 6), TRUE)) {
            continue ;
        }

        $orderXml = Service_EpacketWebService::getOrderContent($order['order_code']);
        $eub      = new Service_EpacketWebService();
        $response = $eub->validate($orderXml);

        if ('success' === strtolower(trim($response['status']))) {
            // 创建SZY-EUB订单
            $response = $eub->createEpacketOrder($orderXml);

            if (isset($response['mailnum']) && '' !== $response['mailnum']) {
                $orderLog = array(
                    'order_id'          => $order['order_id'],
                    'order_code'        => $order['order_code'],
                    'ol_type'           => 1,
                    'order_status_from' => $order['order_status'],
                    'order_status_to'   => $order['order_status'],
                    'ol_add_time'       => date("Y-m-d H:i:s"),
                    'user_id'           => 0,
                    'ol_comments'       => 'ETK自动取单号以及标签->autoAsnETK.php',
                );
                Service_OrderLog::add($orderLog);
                Service_Orders::update(array(
                    'ref_tracking_number' => $response['mailnum'],
                ), $order['order_id'], 'order_id');

                $signStr = md5($ApiSign.$response['mailnum']);
                $pdfUrl = "http://labels.ems.com.cn/partner/api/public/p/static/label/download/".$signStr."/".$response['mailnum'].".pdf";
                //$labelResult = $epaService->getOneLableByMailnum($response['mailnum']);
                $fileStream = file_get_contents($pdfUrl,false,null);
                $pdfFile = APPLICATION_PATH.'/../data/pdf/ETK/'.$order['order_code'].".pdf";
                if(!file_exists($pdfFile)){
                    touch($pdfFile);
                }
                file_put_contents($pdfFile,$fileStream);

                echo '订单', $order['order_code'], '获取单号', $response['mailnum'], '成功', "\r\n";
            }
            else {
                $errorText= '订单'. $order['order_code']. '提交出错:'. $response['description']. "\r\n";
                   $errorLog=array(
                 'order_code'=>$order['order_code'],
                 'sm_code'=>$order['sm_code'],
                 'content'=>$errorText,
             );
             Service_TrackingErrorLog::add($errorLog);
             echo $errorText;
                
            }
        }
        else {
            $errorText= '订单'. $order['order_code']. '提交出错:'. $response['description']. "\r\n";
                $errorLog=array(
                 'order_code'=>$order['order_code'],
                 'sm_code'=>$order['sm_code'],
                 'content'=>$errorText,
             );
             Service_TrackingErrorLog::add($errorLog);
             echo $errorText;
        }
    }
}

echo '[', date('Y-m-d H:i:s'), '] End run', "\r\n";
@unlink($flag);
