zhaojs
2023-09-21 3cbd9dc493e8663d9ec1a2816e664f7c9289b8a3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
<?php
 
namespace app\api\controller;
 
use app\common\controller\Api;
use think\Log;
use app\api\logic\taoke\device\Zhetaoke as LogicZhetaoke;
use app\api\logic\order\TbOrder as LogicTbOrder;
 
/**
 * 同步淘宝订单
 */
class AnsyTaobaoOrder extends Api
{
 
    protected $noNeedLogin = '*';
    protected $noNeedRight = '*';
 
    protected $max_page = 50; //最大执行页数
 
    protected $page_size = 100; //每页获取数据
 
 
 
    public function __construct()
    {
        $key = request()->param('key','');
        if(empty($key)) fault('访问受限');
        if($key != config('site.pas_key'))fault('访问密钥错误,访问受限');
    }
 
    /**
     * 同步订单近20分钟内的订单
     *
     * @return void
     */
    public function syncOrder()
    {
        $time_str = date("Y-m-d H:i:s");
        echo "---------".$time_str."同步开始-------------";
        $query_type = request()->param('query_type','');
        if(empty($query_type)){
            mylog('系统提示','查询类型不能为空',"errorInfo");
            fault('查询类型不能为空');
        } 
        $LogicZhetaoke = new LogicZhetaoke();
        $end_time = date("Y-m-d H:i:s",time()); //当前时间
        $start_time = date("Y-m-d H:i:s",time()-20*60);//默认前20分钟
        /**测试 */
        // $start_time = "2022-06-20 23:50:00";
        // $end_time = "2022-06-20 23:59:59";
        $position_index = "";
        $error_flag = false;
        $error = "";
        $LogicTbOrder = new LogicTbOrder();
        for($i=1;$i<=$this->max_page;$i++){
            $res = $LogicZhetaoke->synchronizeOrder($query_type,$start_time,$end_time,2,$position_index,$i,$this->page_size,0);
            if(!$res['status']){
                $error_flag = true;
                $error = $res['info'];
                break;
            }else{
                if($res['total'] == 0)break;
                $position_index = $res['position_index'];
                $order_list = $res['list'];
                if(!empty($order_list)){
                    foreach($order_list as $order){
                        $result = $LogicTbOrder->fanliOrder($order);
                        if(!$result['status']){
                            mylog('订单更新错误',$result['info'],"errorInfo");
                        }
                    }
                }
                if(!$res['has_next'])break;
            }
        }
        if($error_flag){
            mylog('同步错误',$error,"errorInfo");
            fault('同步错误--'.$error);
        }
        echo "---------".$time_str."同步完成-------------";
    }
 
 
 
    /**
     * 同步订单拆分
     *
     * @return void
     */
    public function orderCommission()
    {
        $time_str = date("Y-m-d H:i:s");
        echo "---------".$time_str."同步拆分开始-------------";
        $LogicTbOrder = new LogicTbOrder();
        $result = $LogicTbOrder->chaifenOrder();
        if(!$result)fault('同步拆分错误--'.$result['info']);
        echo "---------".$time_str."同步拆分完成-------------";
    }
 
 
    /**
     * 同步近x天的订单
     *
     * @return void
     */
    public function synchronizeDayOrder()
    {
        $day = request()->param('day','');
        $time_type = request()->param('time_type','now');
        if($time_type == "now"){
            if(empty($day)) fault('只限近90天数据');
            if($day > 90) fault('只限近90天数据');
        }
        $tk_status = request()->param('tk_status','');
        $query_type = request()->param('query_type','');
        if(empty($query_type))fault('查询类型不能为空');
        $interval = request()->param('interval',20); //时间间隔
        if($interval > 100)fault('最大时间间隔100');
        $order_scene = request()->param('order_scene',2);
        $LogicZhetaoke = new LogicZhetaoke();
        if($time_type == 'last_month'){
            $time = strtotime('-1 month');
            $start_time = date('Y-m-d H:i:s',mktime(0,0,0,date('m',$time),01,date('Y',$time))); //上个月的开始时间
            $now_time = mktime(23,59,59,date('m',$time),date('t',$time),date('Y',$time));
        }else{
            $start_time = date("Y-m-d 00:00:00", strtotime("-".($day-1)." day"));
            $now_time = time();
        }
        $error_flag = false;
        $error = "";
        $LogicTbOrder = new LogicTbOrder();
        for($j=strtotime($start_time);$j<=$now_time;$j+=$interval*60){
            $begain_time = date("Y-m-d H:i:s",$j);
            $end_time = date("Y-m-d H:i:s",$j+$interval*60);
            $position_index = "";
            for($i=1;$i<=$this->max_page;$i++){
                $res = $LogicZhetaoke->synchronizeOrder($query_type,$begain_time,$end_time,$order_scene,$position_index,$i,$this->page_size,0,$tk_status);
                if(!$res['status']){
                    $error_flag = true;
                    $error = $res['info'];
                    break;
                }else{
                    if($res['total'] == 0)break;
                    $position_index = $res['position_index'];
                    $order_list = $res['list'];
                    if(!empty($order_list)){
                        foreach($order_list as $order){
                            $result = $LogicTbOrder->fanliOrder($order);
                            if(!$result['status']){
                                mylog('订单更新错误',$result['info'],"errorInfo");
                            }
                        }
                    }
                    if(!$res['has_next'])break;
                }
            }
        }
        if($error_flag){
            mylog('同步错误',$error,"errorInfo");
            fault('同步错误--'.$error);
        }
        echo "同步成功";
 
    }
 
}