<?php

/**
 * @desc    One World Express 万欧订单查询轨迹api 入口文件
 */
require_once ('config.php');

$flagFile = APPLICATION_PATH . '/../data/log/shipOrderTrackingOneWorldExpress.lock';
if (@file_exists($flagFile)) {
    echo 'Another process is running.'."\r\n";
    echo $flagFile."\r\n";
    exit();
}
$link = fopen($flagFile, 'wb');
fclose($link);
define('RUNTIME',  date('Y-m-d H:i:s'));
echo RUNTIME . "Starting.\r\n\r\n";

$orderStatus = array(
    'DataReceived' => '收到数据',
    'InTransit' => '运输途中',
    'DeliveryReady' => '到达待取',
    'DeliveryTried' => '尝试投递失败',
    'Delivered' => '已妥投',
    'DeliveryFailed' => '投递失败',
    'Returned' => '已退回',
    'Lost' => '包裹遗失',
);

$condition = array(
    'sm_code_Arr' => array(
        'BH-3HPA',
        'BH-3H',
        'BH-UKECSLTYD',
        'BH-UKECSLTRM',
        'BH-CORREOS',
        'BH-19EURDPDDE',
        'BH-DAC',
        'BH-SL018',
        'BH-IESLTANPOST',
    ),
    'order_status_Arr' => array(11, 12),  //11物流完成 12物流发货 13已签收
);
$soap = new Service_OneWorldExpressApiProcess();

$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) {
        // 数据过滤
        if (!in_array(trim($v['sm_code']), $condition['sm_code_Arr'])
            // || 0 !== (int) $v['order_mode_type']
            || !in_array(trim($v['order_status']), $condition['order_status_Arr'])
            || ''== trim($v['ref_tracking_number'])) {
            continue ;
        }
        // 调用查询轨迹接口
        $result = $soap->trackPoints($v['order_code']);
        if ($result['Data']['Match'] == 'Unknown') {
            $errorText= "订单".$v['order_code']."查询轨迹: 没有找到匹配的单号"."\n";
            $errorLog=array(
                'order_code'=>$v['order_code'],
                'sm_code'=>$v['sm_code'],
                'content'=>$errorText,
            );
            Service_TrackingErrorLog::add($errorLog);
            echo $errorText;
            continue ;
        }
        foreach ($result['Data']['TrackPoints'] as $value) {
            $map['sot_description'] = $value['Content'];
            $map['order_code'] = $v['order_code'];
            $total = Service_ShipOrderTracking::getByCondition($map, "count(*)");
            if ($total != 0) continue;
            echo "订单".$v['order_code']."查询轨迹:". $orderStatus[$result['Data']['Status']] . $value['Content'] ."\n";

            $add['order_code'] = $v['order_code'];
            $add['sot_location'] = $value['Location'] ? $value['Location'] : '';
            $add['sot_add_time'] = date('Y-m-d H:i:s', strtotime($value['Time']));
            $add['warehouse_id'] = $v['warehouse_id'];
            $add['sot_description'] = $value['Content'];
            $add['tracking_number'] = $result['Data']['Metadata']['TrackingNumber'];
            $add['ref_tracking_number'] = $result['Data']['Metadata']['TrackingNumber'];
            $add['status_desc'] = $orderStatus[$result['Data']['Status']];
            Service_ShipOrderTracking::add($add);
        }
        // 根据第一个轨迹确定订单状态是否完结
        $updateOrder = $orderLog = array();
        if ($result['Data']['Status'] == 'Delivered') {
            $updateOrder = array(
                'order_status' => 13
            );
            $orderLog = array(
                'order_id'=>$v['order_id'],
                'order_code'=>$v['order_code'],
                'ol_type'=>'1',
                'order_status_from'=>$v['order_status'],
                'order_status_to'=>13,
                'ol_add_time'=>RUNTIME,
                'user_id'=>0,
                'ol_comments'=>'oneWorldExpress自动取运输轨迹->shipOrderTrackingOneWorldExpress.php'
            );
            Service_OrderLog::add($orderLog);
        }
        if ($updateOrder) {
            Service_Orders::update($updateOrder,$v['order_id'],"order_id");
            echo "订单".$v['order_code']."查询轨迹:更改订单状态为".$updateOrder['order_status']."\n";
        }
    }
}
echo "[" . date('Y-m-d H:i:s') . "] End run\r\n";
@unlink($flagFile);
