<?php

/**
 *  [冻死迎风站]--[饿死不说么吃饭]
 *  =========================================================================@_@=====================================@_@
 * @desc    4px递四方订单推送api 入口文件
 * @author  leeong <9387524@gmail.com>
 * @version 1.0.0
 */
require_once ('config.php');
// $soap = new Service_FourpxWebService();
// $result = $soap->getPdfByOrderCode('SOE01740000046');
// print_r($result);exit;
$flagFile = APPLICATION_PATH . '/../data/log/auto4px.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";
function getOrderTrackingAndLable($condition) {
    $soap = new Service_FourpxWebService();
    if ($soap->errorMsg) {
        Service_TrackingErrorLog::add(array('content'=>$soap->errorMsg));
        echo $soap->errorMsg;
    } else {
        $total = Service_Orders::getByCondition($condition, "count(*)");
        $pageSize = 100;
        $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']
                        || 4 !== (int) $v['order_status'] || '' !== trim($v['ref_tracking_number'])) {
                    continue;
                }
                // 创建并预报接口
                $result = $soap->createAndPreAlertOrderService($v['order_code']);
                if(!is_array($result)){
                    $errorText = "订单" . $v['order_code'] . "提交出错: action: " .$result. "\n";
                    $errorLog = array(
                        'order_code' => $v['order_code'],
                        'sm_code' => $v['sm_code'],
                        'content' => $errorText,
                    );
                    Service_TrackingErrorLog::add($errorLog);
                    echo $errorText;
                    continue;
                }
                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;
                }
                $updateOrder = array(
                    'ref_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自动取单号以及标签->autoFourpx.php'
                );
                Service_OrderLog::add($orderLog);
                Service_Orders::update($updateOrder, $v['order_id'], "order_id");
                echo "订单" . $v['order_code'] . "获取单号" . $result['return']['trackingNumber'] . "成功\n";
                // 获取打印面单接口
                $response = $soap->getPdfByOrderCode($v['order_code']);
                if ($response['status']) {
                    echo "订单" . $v['order_code'] . "获取打印标签成功URL:" . $response['url'] . "\n";
                } else {
                    echo "订单" . $v['order_code'] . "获取打印标签失败" . $response['message'] . "\n";
                }
            }
        }
    }
}
function get4pxImail($condition) {
    $soap = new Service_FourpxWebService();
    if ($soap->errorMsg) {
        Service_TrackingErrorLog::add(array('content'=>$soap->errorMsg));
        echo $soap->errorMsg;
    } else {
        $total = Service_Orders::getByCondition($condition, "count(*)");
        $pageSize = 100;
        $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) {
                // 创建并预报接口
                $result = $soap->createAndPreAlertOrderService($v['order_code']);
                if(!is_array($result)){
                    $errorText = "订单" . $v['order_code'] . "提交出错: action: " .$result. "\n";
                    $errorLog = array(
                        'order_code' => $v['order_code'],
                        'sm_code' => $v['sm_code'],
                        'content' => $errorText,
                    );
                    Service_TrackingErrorLog::add($errorLog);
                    echo $errorText;
                    continue;
                }
                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;
                }
                if($result['return']['trackingNumber']!=$v['ref_tracking_number']){
                    $updateOrder = array(
                        'ref_tracking_number' => $result['return']['trackingNumber'],
                        'sync_status'=>'1',
                    );
                    $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同步订单信息，更换运单号,'.$v['ref_tracking_number'].'=>'.$result['return']['trackingNumber'],
                    );
                    Service_OrderLog::add($orderLog);
                    Service_Orders::update($updateOrder, $v['order_id'], "order_id");
                    $shipOrder=  Service_ShipOrder::getByField($v['order_code'], 'order_code');
                    if(!empty($shipOrder)){
                        Service_ShipOrder::update(array('tracking_number'=> $result['return']['trackingNumber']), $shipOrder['so_id']);
                    }
                }else{
                      $updateOrder = array(
                        'sync_status'=>'1',
                    );
                    $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同步订单信息',
                    );
                    Service_OrderLog::add($orderLog);
                    Service_Orders::update($updateOrder, $v['order_id'], "order_id");
                }
                 echo "订单" . $v['order_code'] . "获取单号" . $result['return']['trackingNumber'] . "成功\n";
                // 获取打印面单接口
                $response = $soap->getPdfByOrderCode($v['order_code']);
                if ($response['status']) {
                    echo "订单" . $v['order_code'] . "获取打印标签成功URL:" . $response['url'] . "\n";
                } else {
                    echo "订单" . $v['order_code'] . "获取打印标签失败" . $response['message'] . "\n";
                }
            }
        }
    }
}
    $pxmailCondition=array(
      'sm_code_Arr' => array(
        '4PX-SINGAPO_SPACK_IMAIR', //A6
        '4PX-OZXBTH',//BB                                
    ),
    'order_status' => '4',
     'sync_status'=>'0',
    'add_time_start'=>date('Y-m-d H:i:s',strtotime('-30 day')),
    );
get4pxImail($pxmailCondition);
$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-SG_ordinary_mail+',     //CQ
        'LYT-SMTGH-X',
    ),
    'order_status' => '4',
    // 'order_mode_type'=>'0',
    'ref_tracking_number' => '',
    'add_time_start'=>date('Y-m-d H:i:s',strtotime('-10 day')),
);
getOrderTrackingAndLable($condition);//
echo "[" . date('Y-m-d H:i:s') . "] End run\r\n";
@unlink($flagFile);
