<?php

//4PX-LYT_GH&德国的订单定期获取运单号更新至ship_order表

require_once 'config.php';
set_time_limit(0);
$flag = APPLICATION_PATH . '/../data/log/autoFourpxGetTrackingNum.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";

$soap = new Service_FourpxWebService();
if ($soap->errorMsg) {
    Service_TrackingErrorLog::add($soap->errorMsg);
    echo $soap->errorMsg;
} else {
    $condition = array(
        'sm_code_Arr' => array('4PX-LYT_GH'), // 运输方式
        'order_status' => 11, // 订单状态：已提交
    );
    $total = Service_Orders::getByCondition($condition, "count(*)");
    $pageSize = 20;
    $totalPage = ceil($total / $pageSize);
    for ($page = 1; $page <= $totalPage; $page++) {
        $orderList = Service_Orders::getByCondition($condition, '*', $pageSize, $page, 'order_id desc');
        foreach ($orderList as $k => $v) {
            //获取物流出货时间
            $orderOperationTime = Service_OrderOperationTime::getByField($v['order_code'], 'order_code');
            //获取订单收货地址信息
            $orderAddressBook = Service_OrderAddressBook::getByField($v['order_code'], 'order_code');
            // 数据过滤
            if (!in_array(trim($v['sm_code']), $condition['sm_code_Arr']) || !$orderOperationTime || strtotime($orderOperationTime['shipment_time']) + 604800 < time() || !$orderAddressBook || $orderAddressBook['oab_country_id'] != 89)  {
                continue;
            }
            // 查询跟踪号接口
            $result = $soap->findTrackingNumberService($v['order_code']);
            if ($result['return']['ack'] == 'Failure') {
                $cnAtcion = '';
                $cnMessage = '';
                if (isset($result['return']['errors']['cnAction'])) {
                    $cnAtcion.= $result['return']['errors']['cnAction'];
                    $cnMessage.=$result['return']['errors']['cnMessage'];
                } elseif (isset($result['return']['errors'][0])) {
                    foreach ($result['return']['errors'] as $e) {
                        $cnAtcion.=',' . $e['cnAction'];
                        $cnMessage.=',' . $e['cnMessage'];
                    }
                }
                $errorText = "订单" . $v['order_code'] . "提交出错: action: " . $cnAtcion . ' message: ' . $cnMessage . "\n";
                $errorLog = array(
                    'order_code' => $v['order_code'],
                    'sm_code' => $v['sm_code'],
                    'content' => $errorText,
                );
                Service_TrackingErrorLog::add($errorLog);
                echo $errorText;
                continue;
            }

            $shipOrderRow = Service_ShipOrder::getByField($v['order_code'],"order_code","*");
            if ($shipOrderRow['tracking_number'] == $result['return']['trackingNumber']) {
                continue;
            }
            $updateShipOrder = array(
                'tracking_number' => $result['return']['trackingNumber']
            );
            $orderLog = array(
                'order_id' => $v['order_id'],
                'order_code' => $v['order_code'],
                'ol_type' => '1',
                'order_status_from' => $v['order_status'],
                'order_status_to' => $v['order_status'],
                'ol_add_time' => date("Y-m-d H:i:s"),
                'user_id' => 0,
                'ol_comments' => "4PX取单号:订单服务商单号" . $shipOrderRow['tracking_number'] . "=>" . $result['return']['trackingNumber']
            );
            Service_OrderLog::add($orderLog);
            Service_ShipOrder::update($updateShipOrder, $v['order_id'], "order_id");
            echo "订单" . $v['order_code'] . "获取服务商单号" . $result['return']['trackingNumber'] . "成功\n";
        }
    }
}

echo '[', date('Y-m-d H:i:s'), '] End run', "\r\n";
@unlink($flag);
