<?php

/**
 *  [冻死迎风站]--[饿死不说么吃饭]
 *  =========================================================================@_@=====================================@_@
 * @desc    4px递四方订单查询轨迹api 入口文件
 * @author  leeong <9387524@gmail.com>
 * @version 1.0.0
 */
require_once ('config.php');

$flagFile = APPLICATION_PATH . '/../data/log/shipOrderTrackingFourpx.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";

$condition = array(
    'sm_code_Arr' => array(
        '4PX-LYT_GH',               //A6
        '4PX-EU_PACKET',            //DS
        '4PX-RU_POST-LINK_RMAIL',   //BA
        '4PX-HKDHL',                //A1
        '4PX-YX',                   //AI
        '4PX-Singapo_SPack_IMAIR',  //B1
        '4PX-SG_ordinary_mail+'     //CQ
    ),
    'order_status_Arr' => array(11, 12),  //11物流完成 12物流发货 13已签收
    // 'order_mode_type'=>'0',
);
$soap = new Service_FourpxWebService();
if ($soap->errorMsg) {
    Service_TrackingErrorLog::add($soap->errorMsg);
    echo $soap->errorMsg;
} else {
    $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->cargoTrackingService($v['order_code']);
            if ($result['return']['ack'] == 'Failure') {
                $errorText= "订单".$v['order_code']."查询轨迹: action: " . $result['return']['errors']['cnAction'] . ' message: ' . $result['return']['errors']['cnMessage']."\n";
                $errorLog=array(
                     'order_code'=>$v['order_code'],
                     'sm_code'=>$v['sm_code'],
                     'content'=>$errorText,
                 );
                 Service_TrackingErrorLog::add($errorLog);
                 echo $errorText;
                 continue ;
            }

            $map['order_code'] = $v['order_code'];
            foreach ($result['return']['tracks']['trackInfo'] as $key => $value) {
                echo "订单".$v['order_code']."查询轨迹:trackCode:".$value['trackCode']."trackContent:".$value['trackContent']."\n";
                $map['status_desc'] = $value['trackCode'];
                $total = Service_ShipOrderTracking::getByCondition($map, "count(*)");
                if ($total != 0) continue;
                $add['order_code'] = $map['order_code'];
                $add['sot_location'] = $value['occurAddress'] ? $value['occurAddress'] : '';
                $add['sot_add_time'] = RUNTIME;
                $add['warehouse_id'] = $v['warehouse_id'];
                $add['sot_description'] = $value['trackContent'];
                $add['tracking_number'] = $result['return']['referenceNumber'];
                $add['ref_tracking_number'] = $result['return']['referenceNumber'];
                $add['status_desc'] = $value['trackCode'];
                Service_ShipOrderTracking::add($add);
            }
            // 根据第一个轨迹确定订单状态是否完结
            $updateOrder = $orderLog = array();
            if (in_array($result['return']['tracks']['trackInfo'][0]['trackCode'], array('OK', 'OKCC', 'OKGP', 'OKPD', 'OKPO', 'OKPP', 'OKSC', 'OKVP'))) {
                $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'=>date("Y-m-d H:i:s"),
                    'user_id'=>0,
                    'ol_comments'=>'4PX自动取运输轨迹->shipOrderTrackingFourpx.php'
                );
                Service_OrderLog::add($orderLog);
            } /*else {
                if ($v['order_status'] == 12) continue;
                $updateOrder = array(
                    'order_status' => 12
                );
                $orderLog = array(
                    'order_id'=>$v['order_id'],
                    'order_code'=>$v['order_code'],
                    'ol_type'=>'1',
                    'order_status_from'=>$v['order_status'],
                    'order_status_to'=>12,
                    'ol_add_time'=>date("Y-m-d H:i:s"),
                    'user_id'=>0,
                    'ol_comments'=>'4PX自动取运输轨迹->shipOrderTrackingFourpx.php'
                );
                Service_OrderLog::add($orderLog);
            }*/
            if ($updateOrder) {
                Service_Orders::update($updateOrder,$v['order_id'],"order_id");
                echo "订单".$v['order_code']."查询轨迹:trackCode".$result['return']['tracks']['trackInfo'][0]['trackCode']."更改订单状态为".$updateOrder['order_status']."\n";
            }
        }
    }
}
echo "[" . date('Y-m-d H:i:s') . "] End run\r\n";
@unlink($flagFile);
