<?php
namespace process;

use FilesystemIterator;
use Workerman\Timer;
use support\Db;
use support\Log;
use support\ApiTask;

class TaskGetCrmCustomer
{
    private $task;
    public function onWorkerStart()
    {
        $this->task = new ApiTask('api_crm_customer');
        // 每隔60秒检查一次
        // 执行一次大概15秒
        Timer::add(60, function(){
    		$data = $this->task->get();
    		if($data->enable 
    		   && time()>strtotime($data->begin_start_time) //开始时间
    		   && (empty($data->access_time) || time()-strtotime($data->access_time) > $data->interval)
    		){
                $nowTime = getNowTime();
                if($data->interval >= 86400){ //达到或超过1天时
                    $t = explode(' ',$data->begin_start_time); 
                    $jgTime = $t[1];
                    $t = explode(' ',getNowTime()); 
                    $date = $t[0];
                    $nowTime  = $date .' '. $jgTime;
                }
    			$this->task->begin($nowTime);
    			$this->execute($data->access_time,$nowTime);
                $this->task->complete(getNowTime());
    		}
        });
    }
    public function execute($beginTime,$endTime)
    {
        try {
            if(empty($beginTime)) $beginTime = '1900-01-01 01:01:01';
			if(IS_DEVELOP){
				$content='{
					"Data": {
						"result": [
							{
								"NewSAPCode": "400528",
								"Name": "NZUKH AUTO SPARTS",
								"NewShortname": "NZUKH",
								"NewSapCustomername": "阿联酋NZUKH AUTO SPARTS",
								"AccountNumber": "01.ME.DU.030",
								"AccountRatingCode": "4",
								"NewOrdTrade": "FOB",
								"NewSystemUser": "陈俊含",
								"NewOrdPaymentCode": "G012",
								"NewOrdPaymentName": "20%定金，80%发货前",
								"reserve1": "普通客户",
								"reserve2": "阿联酋",
								"reserve3": "中东区",
								"reserve4": "陈俊含",
								"CountryCode": "AE",
								"Employeeid": "110",
								"NewDepartmentCode": "2104",
								"ModifiedOn": "2021/11/25 15:27:21",
								"CreatedOn": "2021/11/25 15:26:19",
								"reserve5": ""
							},
							{
								"NewSAPCode": "400529",
								"Name": "NZUKH AUTO SPARTS2",
								"NewShortname": "NZUKH2",
								"NewSapCustomername": "阿联酋NZUKH AUTO SPARTS",
								"AccountNumber": "01.ME.DU.031",
								"AccountRatingCode": "4",
								"NewOrdTrade": "FOB",
								"NewSystemUser": "陈俊含",
								"NewOrdPaymentCode": "G012",
								"NewOrdPaymentName": "20%定金，80%发货前",
								"reserve1": "普通客户",
								"reserve2": "阿联酋",
								"reserve3": "中东区",
								"reserve4": "陈俊含",
								"CountryCode": "AE",
								"Employeeid": "110",
								"NewDepartmentCode": "2104",
								"ModifiedOn": "2021/11/25 15:27:21",
								"CreatedOn": "'.date('Y-m-d H:i:s').'",
								"reserve5": ""
							}
						]
					},
					"ErrorCode": 0
				}';
				$param = [];
				$json = [
					'status'=>true,
					'content'=>$content
				];
			}else{
                /*测试
				$param = [
					'url'=>'http://test.edi-runtime.jdl.cn/api/sap/QueryAccount',
					'auth'=>[
						'type'=>'BASIC',
						'username'=>'gspcpgl',
						'password'=>'sPEj3kGMfy*7!$+V'
					],
					'dataType'=>'json',
					'data'=>[
						//'sapCode'=>'string',
						'beginTime'=> date('Y-m-d',strtotime($beginTime)),
						'engTime'=> date('Y-m-d',strtotime($endTime))
					],
				];
                */
                //正式
				$param = [
					'url'=>'http://edi-runtime.gsp.cn/api/sap/QueryAccount',
					'auth'=>[
						'type'=>'BASIC',
						'username'=>'gspcpgl',
						'password'=>'Ib1hBGz/4AhO80i_'
					],
					'dataType'=>'json',
					'data'=>[
						//'sapCode'=>'string',
						'beginTime'=> date('Y-m-d',strtotime($beginTime)),
						'engTime'=> date('Y-m-d',strtotime($endTime))
					],
				];
				$json = curl($param);
                file_put_contents('/data/wwwroot/gsp_smart/webman/runtime/logs/task_get_crm_customer_last.log',json_encode($json));
			}
			if(!$json['status']){
				Log::channel('task_get_crm_customer')->info($json['content']);
			}else{
				$res = json_decode($json['content'],true);
				$keys = '{
						"NewSAPCode": "400529",
						"Name": "NZUKH AUTO SPARTS2",
						"NewShortname": "NZUKH2",
						"NewSapCustomername": "阿联酋NZUKH AUTO SPARTS",
						"AccountNumber": "01.ME.DU.031",
						"AccountRatingCode": "4",
						"NewOrdTrade": "FOB",
						"NewSystemUser": "陈俊含",
						"NewOrdPaymentCode": "G012",
						"NewOrdPaymentName": "20%定金，80%发货前",
						"reserve1": "普通客户",
						"reserve2": "阿联酋",
						"reserve3": "中东区",
						"reserve4": "陈俊含",
						"CountryCode": "AE",
						"Employeeid": "110",
						"NewDepartmentCode": "2104",
						"ModifiedOn": "2021/11/25 15:27:21",
						"CreatedOn": "2021/11/25 15:26:19",
						"reserve5": ""
						}';
				$keys = array_keys(json_decode($keys,true));
				if($res['ErrorCode']=='0'){
					$data = [];
					foreach($res['Data']['result'] as $v){
						$item = [];
						foreach($keys as $key){
							if(isset($v[$key])){
								$item[$key] = $v[$key];
							}
						}
						array_push($data,$item);
					}
					/*
					Db::table('api_crm_customer')->truncate();
					$chunk = array_chunk($data,300);
					foreach($chunk as $list){
						Db::table('api_crm_customer')->insertOrIgnore($list);
					}*/
					foreach ($data as $item){
						$item['NewSAPCode'] = trim($item['NewSAPCode']);
						$item['AccountNumber'] = trim($item['AccountNumber']);
						$row = Db::table('api_crm_customer')
								->where('NewSAPCode',$item['NewSAPCode'])
								->orWhere('AccountNumber',$item['AccountNumber'])
								->first();
						if(empty($item['NewSAPCode']) && empty($item['AccountNumber'])){
							;//客户必须要有一个编码
						}else{
							if(!empty($item['AccountNumber'])){
								//$item['guid'] = md4($item['AccountNumber']);
								$item['guid'] = $item['AccountNumber'];
							}else{
								//$item['guid'] = md4($item['NewSAPCode']);
								$item['guid'] = $item['NewSAPCode'];
							}
							if(!empty($row)){
								Db::table('api_crm_customer')
									->updateOrInsert(
										['AccountNumber'=>$item['AccountNumber']],
										$item
									);
							}else{
								Db::table('api_crm_customer')->insertOrIgnore($item);
							}
						}
					}
				}else{
				    $this->task->error(json_encode($json,JSON_UNESCAPED_UNICODE));
				    if(strpos($json['content'],'参数d')==false){
				        Log::channel('task_get_crm_customer')->info(json_encode($json,JSON_UNESCAPED_UNICODE));
				    }
				}
				$this->task->meta(json_encode($param,JSON_UNESCAPED_UNICODE));
			}
        } catch (Exception $e) {
            Log::channel('task_get_crm_customer')->info($e->getMessage());
        }
    }
}