"","time"=>0,"src_row"=>0];
$message = "
正在处理 {$path}
";
$redis=redis_connect();
if($redis){
$sync_key = $redis->hget("sync://key",$_COOKIE["userid"]);
if($sync_key===FALSE){
$message.= "客户端没有钥匙"."
";
$output["message"]=$message;
echo json_encode($output, JSON_UNESCAPED_UNICODE);
exit;
}
}
else{
$message.= "redis连接失败"."
";
$output["message"]=$message;
echo json_encode($output, JSON_UNESCAPED_UNICODE);
exit;
}
$client = new \GuzzleHttp\Client();
if($size<0){
$response = $client->request('POST', $server.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'sync_count','time'=>$time,'size'=>$size,"key"=>$sync_key,"userid"=>$_COOKIE["userid"]]]);
$serverJson=(string)$response->getBody();
$serverData = json_decode($serverJson,true);
echo json_encode($serverData, JSON_UNESCAPED_UNICODE);
exit;
}
$response = $client->request('POST', $server.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'sync','time'=>$time,'size'=>$size,"key"=>$sync_key,"userid"=>$_COOKIE["userid"]]]);
$serverJson=(string)$response->getBody();
$serverData = json_decode($serverJson,true);
if($serverData===NULL){
$message.="无法解码 数据:".$serverJson;
$output["message"]=$message;
echo json_encode($output, JSON_UNESCAPED_UNICODE);
exit;
}
if($serverData["error"]>0){
$message.=$serverData["message"];
$output["message"]=$message;
echo json_encode($output, JSON_UNESCAPED_UNICODE);
exit;
}
$message .= "";
$serverDBData = $serverData["data"];
$output["src_row"]=count($serverDBData);
$message.= "输入时间:".$time." | ";
$message.= "src_row:".$output["src_row"]." | ";
if($output["src_row"]>0){
$output["time"]=$serverDBData[$output["src_row"]-1]["receive_time"];
$message.= "最新时间:".$output["time"]." | ";
}
else{
$message .= "没有查询到数据
";
$output["message"]=$message;
echo json_encode($output, JSON_UNESCAPED_UNICODE);
exit;
}
$aIdList=array();
foreach($serverDBData as $sd){
$aIdList[]=$sd["sync_id"];
}
$sIdlist = json_encode($aIdList, JSON_UNESCAPED_UNICODE);
// 拉 id 列表
$response = $client->request('POST', $localhost.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'sync','id'=>$sIdlist,'size'=>$size,"key"=>$sync_key,"userid"=>$_COOKIE["userid"]]]);
$strLocalData = (string)$response->getBody();
$localData = json_decode($strLocalData,true);
if($localData["error"]>0){
$message .="client 拉 id 列表 error:". $localData["message"];
$output["message"]=$message;
echo json_encode($output, JSON_UNESCAPED_UNICODE);
exit;
}
$localDBData = $localData["data"];
$localCount = count($localDBData);
$message .= "local-row:".$localCount." | ";
$message .= "";
$localindex=array();
$insert_to_server=array();
$update_to_server=array();
$insert_to_local=array();
$update_to_local=array();
#开始比对数据
foreach($localDBData as $local){
$localindex[$local["sync_id"]][0]=$local["modify_time"];
$localindex[$local["sync_id"]][1]=false;
}
foreach($serverDBData as $sd){
if(isset($localindex[$sd["sync_id"]])){
$localindex[$sd["sync_id"]][1]=true;
if($sd['modify_time']>$localindex[$sd["sync_id"]][0]){
//服务器数据较新 server data is new than local
$update_to_local[]=$sd["guid"];
}
else if($sd['modify_time']==$localindex[$sd["sync_id"]][0]){
//"相同 same
}
else{
//"服务器数据较旧 local data is new than server
//$update_to_server[]=$sd->guid;
}
}
else{
//本地没有 新增 insert recorder in local
$insert_to_local[]=$sd['guid'];
}
}
foreach($localindex as $x=>$x_value){
if($x_value[1]==false){
//服务器新增 new data in server;
//$insert_to_server[]=$x;
}
}
$syncCount = count($insert_to_server)+count($update_to_server)+count($insert_to_local)+count($update_to_local);
if($syncCount==0){
$message .= "与服务器数据完全一致,无需更新。
";
}
else{
//start sync
$message .= "";
if(count($insert_to_local)>0){
$message .= "需要新增到目标机".count($insert_to_local)."条记录 | ";
#提取数据
$idInServer = json_encode($insert_to_local, JSON_UNESCAPED_UNICODE);
$response = $client->request('POST', $server.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'get','id'=>"{$idInServer}","key"=>$sync_key,"userid"=>$_COOKIE["userid"]]]);
$serverData=(string)$response->getBody();
$arrData = json_decode($serverData,true);
if($arrData["error"]==0){
$message .= "数据提取成功:{$arrData["message"]} | ";
$strData = json_encode($arrData["data"], JSON_UNESCAPED_UNICODE);
$response = $client->request('POST', $localhost.'/app/'.$path, ['verify' => false,'form_params'=>['op'=>'insert','data'=>"{$strData}","key"=>$sync_key,"userid"=>$_COOKIE["userid"]]]);
$insertMsg = (string)$response->getBody();
$arrInsertMsg = json_decode($insertMsg,true);
$message .= $arrInsertMsg["message"] . " | ";
}
else{
$message .= "数据提取错误 错误信息:{$arrData["message"]} ";
}
}
$message .= "
";
$message .= "";
if(count($update_to_local)>0){
$message .= "需要更新到目标机".count($update_to_local)."条记录 | ";
$idInServer = json_encode($update_to_local, JSON_UNESCAPED_UNICODE);
$response = $client->request('POST', $server.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'get','id'=>"{$idInServer}","key"=>$sync_key,"userid"=>$_COOKIE["userid"]]]);
$serverData=(string)$response->getBody();
$arrData = json_decode($serverData,true);
if($arrData["error"]==0){
$message .= "数据提取成功:{$arrData["message"]} | ";
$strData = json_encode($arrData["data"], JSON_UNESCAPED_UNICODE);
$response = $client->request('POST', $localhost.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'update','data'=>"{$strData}","key"=>$sync_key,"userid"=>$_COOKIE["userid"]]]);
$strMsgUpdate = (string)$response->getBody();
$arrMsgUpdate = json_decode($strMsgUpdate,true);
$message .= $arrMsgUpdate["message"] . " | ";;
}
else{
$message .= "数据提取错误 错误信息:{$arrData["message"]} ";
}
}
$message .= "
";
}
$output["message"]=$message;
echo json_encode($output, JSON_UNESCAPED_UNICODE);
?>