Candy 6 anni fa
parent
commit
50edaea99f

+ 0 - 19
thinkphp/TCPserver/config.php

@@ -11,25 +11,6 @@ define('MT4_PLUGIN_MASTER', 'titan666');
 define('MT4_PLUGIN_NAME', 'AutoHedge');
 
 
-//database
-/*define('DB_NAME', 'monk_live');
-define('DB_HOST', 'st.titanera.com');
-define('DB_PORT', 3306);
-define('DB_USERNAME', 'root');
-define('DB_PASSWORD', 'abc123');*/
-
-/*define('DB_NAME', 'mt4r111');
-define('DB_HOST', '192.168.5.110');*/
-//define('DB_HOST', '192.168.5.104');
-/*define('DB_PORT', 3306);
-define('DB_USERNAME', 'elmo');
-define('DB_PASSWORD', 'Elmo@666');*/
-
-/*define('DB_NAME', 'view');
-define('DB_HOST', '127.0.0.1');
-define('DB_PORT', 3306);
-define('DB_USERNAME', 'root');
-define('DB_PASSWORD', 'root');    */
 define('DB_NAME', 'mt5');
 define('DB_HOST', '103.230.218.164');
 define('DB_PORT', 3306);

+ 177 - 155
thinkphp/TCPserver/tcpServer.php

@@ -20,7 +20,7 @@ date_default_timezone_set("PRC");
 
 //初始化  (创建了一个tcp服务)
 
-$workerTcp = new Worker("tcp://127.0.0.1:12345");
+$workerTcp = new Worker("tcp://0.0.0.0:12346");
 
 $workerTcp->name = "TCP";
 
@@ -28,7 +28,7 @@ $workerTcp::$logFile = __DIR__.'/workerman.log';
 $num = 1;
 
 $workerTcp->onWorkerStart = function ($workerTcp) {
-
+    global $dbMt5;
     global $db;                                  //数据库
     global $con;                                 //访问本地创建的webserver服务器
     global $connection_to_tcp;                   //访问接口服务器(远程的)
@@ -51,10 +51,10 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
     $seqnum = 1;
     getToken();
     $db     = new Connection(DB_HOST, DB_PORT, DB_USERNAME, DB_PASSWORD, DB_NAME);  //本地数据库的配置
-
+    $dbMt5 = new Connection("43.249.29.218","23891","mt5devel","Pn9OZuvfmJFGZf4qsDQuYA32q3ryVPV0","mt5backup");
 
     //访问本地的websocket服务器=============================================
-    $con            = new AsyncTcpConnection("ws://127.0.0.1:12380");
+    $con            = new AsyncTcpConnection("ws://127.0.0.1:12381");
     $con->onConnect = function ($on) {
         global $index;
         global $rollback_index;
@@ -75,7 +75,7 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
         global $send_data;
         global $connection_count;
         $msg = json_decode($data, true);
-     
+
         if ($msg['type'] == "heartbeat") {
             $connection_count = $msg["connection_count"];
         }
@@ -83,7 +83,7 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
             sendTo_tcp_Server($msg);
         }
         if ($msg['type'] == "set_current_order") {     //设置当前跟单订单
-        
+
             sendTo_tcp_Server($msg);
         }
         if($msg['type'] == 'set_current_position'){
@@ -101,7 +101,7 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
             }else{
                 $message = 0;
             }
-         
+
             $insert_data = $msg['data'];
             $insert_data = array_chunk($insert_data, 12);      //每十个是一个数组
             $send_data   = $insert_data;   //传递的数据
@@ -169,99 +169,100 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
     };
 
 
-        $connection_to_tcp->onClose = function($connection_to_tcp)
-        {
+    $connection_to_tcp->onClose = function($connection_to_tcp)
+    {
 
-            echo "connection closed\n";
-            log_file("to_tcp connection closed\n");
+        echo "connection closed\n";
+        log_file("to_tcp connection closed\n");
 
-           // $connection_to_tcp->reConnect();  //执行连接
-        };
+        // $connection_to_tcp->reConnect();  //执行连接
+    };
 
-        $connection_to_tcp->onError = function($connection_to_tcp, $code, $msg)
-        {
-            echo "Error code:$code msg:$msg\n";
-        };
+    $connection_to_tcp->onError = function($connection_to_tcp, $code, $msg)
+    {
+        echo "Error code:$code msg:$msg\n";
+    };
 
 
 
-        // 向远处的服务器发送信息============================================================
+    // 向远处的服务器发送信息============================================================
 
-        $connection_to_tcp->connect();  //执行连接
-        //发送给  接口tcp服务器     心跳========================================================
+    $connection_to_tcp->connect();  //执行连接
+    //发送给  接口tcp服务器     心跳========================================================
 
-        Timer::add(30, function () use ($connection_to_tcp) {
+    Timer::add(30, function () use ($connection_to_tcp) {
 
-                //定时发送心跳信息
-                $connection_to_tcp->send('{"type":"ping"}' . "\n");
+        //定时发送心跳信息
+        $connection_to_tcp->send('{"type":"ping"}' . "\n");
 
-        });
+    });
 
 
 
-        // 发送给 webserver 服务器  心跳=====================================================
-        Timer::add(1, function () use ($con,$connection_to_tcp) {
-            // 定时发送心跳信息
-            global $connection_count;
+    // 发送给 webserver 服务器  心跳=====================================================
+    Timer::add(1, function () use ($con,$connection_to_tcp) {
+        // 定时发送心跳信息
+        global $connection_count;
 
-            if($connection_count){
-                if($connection_count>1){
+        if($connection_count){
+            if($connection_count>1){
 
-                    $connection_to_tcp->connect();  //客户端上线重新连接接口
-                    $connection_to_tcp->onConnect = function ($connection_to_tcp) {
-                        // 发送心跳信息
-                        $connection_to_tcp->send('{"type":"ping"}' . "\n");
-                    };
-                    // 接口服务器向我发送的信息
-                    $connection_to_tcp->onMessage = function ($connection_to_tcp, $data) {
+                $connection_to_tcp->connect();  //客户端上线重新连接接口
+                $connection_to_tcp->onConnect = function ($connection_to_tcp) {
+                    // 发送心跳信息
+                    $connection_to_tcp->send('{"type":"ping"}' . "\n");
+                };
+                // 接口服务器向我发送的信息
+                $connection_to_tcp->onMessage = function ($connection_to_tcp, $data) {
 
-                        tcpMessHandle($data);
-                    };
+                    tcpMessHandle($data);
+                };
 
-                    $connection_to_tcp->onClose = function($connection_to_tcp)
-                    {
+                $connection_to_tcp->onClose = function($connection_to_tcp)
+                {
 
-                        echo "connection closed\n";
-                        log_file("to_tcp connection closed\n");
+                    echo "connection closed\n";
+                    log_file("to_tcp connection closed\n");
 
-                        // $connection_to_tcp->reConnect();  //执行连接
-                    };
+                    // $connection_to_tcp->reConnect();  //执行连接
+                };
 
-                    $connection_to_tcp->onError = function($connection_to_tcp, $code, $msg)
-                    {
-                        echo "Error code:$code msg:$msg\n";
-                    };
+                $connection_to_tcp->onError = function($connection_to_tcp, $code, $msg)
+                {
+                    echo "Error code:$code msg:$msg\n";
+                };
 
-                }else{
-                    //客户端不在线
-                    $connection_to_tcp->close();
-                }
+            }else{
+                //客户端不在线
+                $connection_to_tcp->close();
             }
-            $con->send(json_encode(['type' => 'heartbeat']). "\n");
-        });
+        }
+        $con->send(json_encode(['type' => 'heartbeat']). "\n");
+    });
 
 
-        Timer::add(300,function(){
-            refreshToken();
-            global $token;
-            var_dump($token);
-        });
-        // 心跳检测(TCP 所有客户端) 心跳===================================================
-        Timer::add(1, function () use ($workerTcp) {
-            $time_now = time();      //当前时间
-            foreach ($workerTcp->connections as $connection) {
-                // 有可能该connection还没收到过消息,则lastMessageTime设置为当前时间
-                if (empty($connection->lastMessageTime)) {
-                    $connection->lastMessageTime = $time_now;
-                    continue;
-                }
-                // 上次通讯时间间隔大于心跳间隔,则认为客户端已经下线,关闭连接
-                if ($time_now - $connection->lastMessageTime > HEARTBEAT_TIME) {
+    /*Timer::add(,function(){
+         global $token;
+        refreshToken();
 
-                    $connection->close();
-                }
-            } 
-        });
+
+     });*/
+    // 心跳检测(TCP 所有客户端) 心跳===================================================
+    Timer::add(1, function () use ($workerTcp) {
+        $time_now = time();      //当前时间
+        foreach ($workerTcp->connections as $connection) {
+            // 有可能该connection还没收到过消息,则lastMessageTime设置为当前时间
+            if (empty($connection->lastMessageTime)) {
+                $connection->lastMessageTime = $time_now;
+                continue;
+            }
+            // 上次通讯时间间隔大于心跳间隔,则认为客户端已经下线,关闭连接
+            if ($time_now - $connection->lastMessageTime > HEARTBEAT_TIME) {
+
+                $connection->close();
+            }
+        }
+    });
 
 };
 
@@ -330,11 +331,11 @@ function tcpMessHandle($data)
         var_dump($msg);
         if ($msg['type'] == "get_order_record") {      //查询订单状态
             $recv_buffer = "";
-           /* if (!isset($msg['seqnum'])) {
-                return false;
-            }
-            ack($msg['seqnum']);
-            $seqnum++;*/
+            /* if (!isset($msg['seqnum'])) {
+                 return false;
+             }
+             ack($msg['seqnum']);
+             $seqnum++;*/
         }
         if ($msg['type'] == "set_current_order") {     //设置当前跟单订单
             $recv_buffer = "";
@@ -342,27 +343,27 @@ function tcpMessHandle($data)
                 return false;
             }*/
             sendToWebServer($msg);
-           /* ack($msg['seqnum']);
-            $seqnum++;*/
+            /* ack($msg['seqnum']);
+             $seqnum++;*/
 
         }
 
         if ($msg['type'] == "insert") {                //Insert请求 (有数据库操作,插入)
             $recv_buffer = "";
-           /* if (!isset($msg['seqnum'])) {
-                return false;
-            }
-            if ($seqnum != $msg["seqnum"]) {
-                return false;
-            }*/
+            /* if (!isset($msg['seqnum'])) {
+                 return false;
+             }
+             if ($seqnum != $msg["seqnum"]) {
+                 return false;
+             }*/
             global $message;
             global $token;
 
             $index++;  //将数据加一
             $total       = count($send_data);  //总数据的长度
             $insert_data = $msg['dest'];
-          /*  ack($msg['seqnum']);
-            $seqnum++;*/
+            /*  ack($msg['seqnum']);
+              $seqnum++;*/
             if ($index < $total) {
                 send_insert($send_data, $index, $send_order);
             } else {
@@ -381,17 +382,17 @@ function tcpMessHandle($data)
                 } else {
                     if($message == 1){
                         if($value['error_code'] == 0){
-                            $arr .= "(" . "'{$msg['type']}'" . "," . $msg['orig_order'] . "," . $msg['orig_login'] . "," . $value['dest_login'] . "," . $value['dest_order'] . "," . $value['percentage'] . "," . $value['profit'] . "," . $value['error_code'] . "," . $time . ")" . ",";
-                         $delete_sql .= "(dest_login = $value[dest_login] and orig_order = $msg[orig_order] and error_code != 0) or ";
+                            $arr .= "(" . "'{$msg['type']}'" . "," . $msg['orig_position'] . "," . $msg['orig_login'] . "," . $value['dest_login'] . "," . $value['dest_position'] . "," . $value['percentage'] . "," . $value['profit'] . "," . $value['error_code'] . "," . $time . ")" . ",";
+                            $delete_sql .= "(dest_login = $value[dest_login] and orig_order = $msg[orig_position] and error_code != 0) or ";
                             $login .= $value['dest_login'].",";
                         }
                     }else{
 
-                    $arr .= "(" . "'{$msg['type']}'" . "," . $msg['orig_order'] . "," . $msg['orig_login'] . "," . $value['dest_login'] . "," . $value['dest_order'] . "," . $value['percentage'] . "," . $value['profit'] . "," . $value['error_code'] . "," . $time . ")" . ",";
-                    if($value['error_code'] == 0){
+                        $arr .= "(" . "'{$msg['type']}'" . "," . $msg['orig_position'] . "," . $msg['orig_login'] . "," . $value['dest_login'] . "," . $value['dest_position'] . "," . $value['percentage'] . "," . $value['profit'] . "," . $value['error_code'] . "," . $time . ")" . ",";
+                        if($value['error_code'] == 0){
 
-                        $login .= $value['dest_login'].",";
-                    }
+                            $login .= $value['dest_login'].",";
+                        }
 
                     }
 
@@ -404,6 +405,7 @@ function tcpMessHandle($data)
             $arr   = substr($arr, 0, -1);
             $sql   = sprintf("INSERT INTO %s(%s) VALUES %s ", "order_progress", $filed, $arr);
             $sql2  = sprintf("INSERT INTO %s(%s) VALUES %s", "order_save", $filed, $arr);
+
             if($message == 1){
                 if ($delete_sql != 'delete from order_progress where ') {
                     $delete_sql = trim($delete_sql, 'or ');
@@ -417,32 +419,33 @@ function tcpMessHandle($data)
                 $db->query($sql2);
             }
 
+
             if($login){
                 $logins = substr($login,0,-1);
                 balancefix($logins);
 
             }
 
-           /* if($message == 1){
+            if($message == 1){
                 $msg['type'] = "ErrorInsert";
             }else{
                 $msg['type'] = "insert";
-            }*/
+            }
             sendToWebServer($msg); //发送给前端
         }
         if ($msg['type'] == "rollback") {              //Rollback请求 (有数据库操作,插入并看看是否需要直接返回给前端)
             $recv_buffer = "";
-          /*  if (!isset($msg['seqnum'])) {
-                return false;
-            }
-            if ($seqnum != $msg['seqnum']) {
-                return false;
-            }*/
+            /*  if (!isset($msg['seqnum'])) {
+                  return false;
+              }
+              if ($seqnum != $msg['seqnum']) {
+                  return false;
+              }*/
             $rollback_index++;  //将数据加一
             $total        = count($rollback_data);  //总数据的长度
             $rollbackdata = $msg['desc'];
-         /*   ack($msg["seqnum"]);
-            $seqnum++;*/
+            /*   ack($msg["seqnum"]);
+               $seqnum++;*/
             if ($rollback_index < $total) {
                 send_rollback($rollback_data, $rollback_index);
 
@@ -456,7 +459,13 @@ function tcpMessHandle($data)
 
             $update = [];
             $login = '';
+            foreach($rollbackdata as $key=>$value){
+                $rollbackdata[$key]['dest_orders'] = json_encode($rollbackdata[$key]['dest_orders'],JSON_FORCE_OBJECT);
+                $rollbackdata[$key]['dest_deals'] = json_encode($rollbackdata[$key]['dest_orders'],JSON_FORCE_OBJECT);
+            }
+
             foreach ($rollbackdata as $key => $value) {
+
                 if ($value['error_code'] == -2) {
                     return false;
                 } else {
@@ -464,15 +473,14 @@ function tcpMessHandle($data)
                     $time = time();
                     if ($value['error_code'] == 0) {
 
-                        $delete_sql .= "(dest_login = $value[dest_login] and orig_order = $msg[orig_order]) or ";
-                        $value['dest_orders'] = json_encode($value['dest_orders']);
-                        $value['dest_deals'] = json_encode($value['dest_deals']);
-                        $insert_sql .= "('$msg[type]',$msg[orig_order],$msg[orig_login],$value[dest_login], $value[dest_orders],$value[dest_deals],$value[percentage],$value[error_code],$time),";
-                      $login .= $value['dest_login'].",";
+                        $delete_sql .= "(dest_login = $value[dest_login] and orig_order = $msg[orig_position]) or ";
+                        var_dump($value['dest_login']);
+                        $insert_sql .= "('$msg[type]',$msg[orig_position],$msg[orig_login],'$value[dest_login]','$value[dest_orders]',$value[dest_deals],$value[percentage],$value[error_code],$time),";
+                        $login .= $value['dest_login'].",";
                     } else {
                         //不成功把参数组装数组以便批量修改
                         $rollbackdata[$key]['type']       = $msg['type'];
-                        $rollbackdata[$key]['orig_order'] = $msg['orig_order'];
+                        $rollbackdata[$key]['orig_order'] = $msg['orig_position'];
                         $rollbackdata[$key]['orig_login'] = $msg['orig_login'];
                         $rollbackdata[$key]['addtime']    = time();
                         array_push($update, $value);
@@ -481,9 +489,12 @@ function tcpMessHandle($data)
                 }
             }
 
+
+
+
             //执行批量修改数据
             if (!empty($update)) {
-                $sql = batchUpdate($rollbackdata, 'dest_login', ['orig_order' => $msg['orig_order']],"order_progress");
+                $sql = batchUpdate($rollbackdata, 'dest_login', ['orig_order' => $msg['orig_position']],"order_progress");
                 $db->query($sql);
             }
 
@@ -494,24 +505,28 @@ function tcpMessHandle($data)
                 $db->query($delete_sql);
                 $db->query($insert_sql);
                 if($login){
+
                     $logins = substr($login,0,-1);
+                    var_dump($logins);
                     balancefix($logins);
 
                 }
+
+
             }
 
         }
 
         if ($msg['type'] == "except_rollback") {       //retry表中的Rollback请求 (有数据库操作,插入并看看是否需要直接返回给前端)
             $recv_buffer = "";
-           /* if (!isset($msg['seqnum'])) {
-                return false;
-            }
-            if ($seqnum != $msg['seqnum']) {
-                return false;
-            }*/
-         /*   ack($msg["seqnum"]);
-            $seqnum++;*/
+            /* if (!isset($msg['seqnum'])) {
+                 return false;
+             }
+             if ($seqnum != $msg['seqnum']) {
+                 return false;
+             }*/
+            /*   ack($msg["seqnum"]);
+               $seqnum++;*/
             $retry_rollback_index++;       //将数据加一
             $total = count($retry_rollback_data);  //总数据的长度
             if ($retry_rollback_index < $total) {
@@ -561,14 +576,14 @@ function tcpMessHandle($data)
 
 
         if ($msg['type'] == "retry") {                //
-           /* if (!isset($msg['seqnum'])) {
-                return false;
-            }
-            if ($seqnum != $msg['seqnum']) {
-                return false;
-            }*/
-           /* ack($msg["seqnum"]);
-            $seqnum++;*/
+            /* if (!isset($msg['seqnum'])) {
+                 return false;
+             }
+             if ($seqnum != $msg['seqnum']) {
+                 return false;
+             }*/
+            /* ack($msg["seqnum"]);
+             $seqnum++;*/
             $retry_index++;                           //将数据加一
             $total = count($retry_data);              //总数据的长度
             if ($retry_index < $total) {
@@ -634,7 +649,7 @@ function sendToWebServer($data)
 {
     global $con;
     log_file($data);
-   $con->send(json_encode($data) . "\n");
+    $con->send(json_encode($data) . "\n");
 
 }
 
@@ -643,18 +658,18 @@ function sendToWebServer($data)
 function sendTo_tcp_Server($data){
     global $connection_to_tcp;
     global $seqnum;
-   // $data['seqnum'] = $seqnum;
+    // $data['seqnum'] = $seqnum;
     log_file($data);
     echo "发送给接口的信息";
     var_dump($data);
-   $connection_to_tcp->send(json_encode($data) . "\n");
+    $connection_to_tcp->send(json_encode($data) . "\n");
 }
 
 // insert 数据
 function send_insert($data,$index=0,$order){
-    
+
     $send['type'] = "insert_some";
-    $send['orig_order'] = (int)$order;     //订单号码
+    $send['orig_position'] = (int)$order;     //订单号码
     $send['dest'] =[];
     $send_data = $data[$index];                                //将分割的数据交给全局变量
     foreach ($send_data as $key => $value) {
@@ -663,32 +678,31 @@ function send_insert($data,$index=0,$order){
         array_push($send['dest'],$send_child);
     }
 
-    sendTo_tcp_Server($send); 
+    sendTo_tcp_Server($send);
 }
 
 // rollback 数据
 function send_rollback($data,$index=0){
 
-    global $db;
+    global $dbMt5;
     $send['type'] = "rollback_some";
-    $send['orig_order'] = (int)$data[$index][0]['orig_order'];     //订单号码
+    $send['orig_position'] = (int)$data[$index][0]['orig_order'];     //订单号码
     $send['orig_login'] = (int)$data[$index][0]['orig_login'];     //登录者账号
     $send['desc'] =[];
     $send_child =[];
-
-    $send_data = $data[$index];//将分割的数据交给全局变量
-
+    $send_data = $data[$index];                                   //将分割的数据交给全局变量
     foreach ($send_data as $key => $value) {
-        $order = $db->query("SELECT `Order` FROM mt5_orders_history WHERE PositionID = {$value['dest_order']}");
-        $deals = $db->query("select `Deal` FROM mt5_deals  WHERE PositionID = {$value['dest_order']}");
+        $order = $dbMt5->query("SELECT `Order` FROM mt5_orders_history WHERE PositionID = {$value['dest_order']}");
+        $deals = $dbMt5->query("SELECT `Deal` FROM mt5_deals WHERE PositionID = {$value['dest_order']}");
         $send_child['dest_login'] = (int)$value['dest_login'];   //登录的账号
-        $send_child['dest_orders'] = array_column($order,"Order");   //订单号
-        $send_child['dest_deals'] = array_column($deals,"Deal");
-        $send_child['percentage'] = (int)$value['percentage'];   //手数
+        $send_child['dest_orders'] = array_column($order,'Order');   //订单号
+        $send_child['dest_deals'] = array_column($deals,'Deal');
+        $send_child['percentage'] = (int)$value['percentage'];
         array_push($send['desc'],$send_child);
     }
-    var_dump($send);
-   // sendTo_tcp_Server($send);
+
+
+    sendTo_tcp_Server($send);
 }
 
 
@@ -711,7 +725,7 @@ function send_retry_rollback($data,$index=0){
     }
     echo "发送的数据";
     var_dump($send);
-    sendTo_tcp_Server($send); 
+    sendTo_tcp_Server($send);
 }
 
 // retry表中的retry操作
@@ -732,7 +746,7 @@ function send_retry($data,$index=0){
     }
     echo "发送的数据";
     var_dump($send);
-    sendTo_tcp_Server($send); 
+    sendTo_tcp_Server($send);
 }
 
 
@@ -782,10 +796,11 @@ function parseParams($params)
 function getToken()
 {
     global $token;
-
-    $params = ['request'=>'login','login'=>LOGIN,'password'=>PASSWORD];
-    $data = http(BALANCE_URL,$params);
+    $requestApi = "/api/request_token";
+    $params = ['login'=>LOGIN,'password'=>PASSWORD];
+    $data = http(BALANCE_URL.$requestApi,$params,"POST");
     $data = json_decode($data,true);
+    var_dump($requestApi,$data);
     $token = $data['token'];
 
 }
@@ -798,15 +813,22 @@ function refreshToken()
     $data = http(BALANCE_URL,$params);
     $data = json_decode($data,true);
     $token = $data['token'];
+
 }
 
 function  balancefix($logins)
 {
     global $token;
-
-    $params = ['logins'=>$logins,'request'=>'balancefix','token'=>$token];
-    $data = http(BALANCE_URL,$params);
+    $requestApi = "/api/balance_fix";
+    $params = ['logins'=>$logins,'token'=>$token];
+    $data = http(BALANCE_URL.$requestApi,$params,"POST");
+    $data = json_decode($data,true);
     var_dump($data);
+    if(!$data){
+        getToken();
+        balancefix($logins);
+    }
+
 
 }
 //发送curl

+ 14 - 16
thinkphp/TCPserver/webserver.php

@@ -8,10 +8,8 @@ use Workerman\Worker;                      //worker类
 use Workerman\Lib\Timer;                   //定时器函数
 
 
-
 //初始化   创建 websocket 服务器
-$workerWs = new Worker("websocket://127.0.0.1:12380");
-
+$workerWs = new Worker("websocket://0.0.0.0:12381");
 $workerWs->name = "WebSocket";   //命名为WebSocket
 $connection_count = 0;
 
@@ -48,7 +46,7 @@ $workerWs->onMessage = function ($connection, $data) {
     $connection_count = count($workerWs->connections);
     $bufExplode = explode("\n", $data);    //通过指定的分隔符,把字符串打散为数组
     foreach ($bufExplode as $key => $value) {
-        
+
         $msg = json_decode($value, true);         //解析数据
 
         if ($msg) {
@@ -57,7 +55,7 @@ $workerWs->onMessage = function ($connection, $data) {
                     $results['type'] = 'heartbeat';
                     $results['data'] = 'I heard';
 
-                   // sendToWeb($msg);
+                    // sendToWeb($msg);
                     $results['connection_count'] = $connection_count;
                     $connection->send(json_encode($results) . "\n");
 
@@ -65,7 +63,7 @@ $workerWs->onMessage = function ($connection, $data) {
                 case "login":                                  //异步客户端的登录(标识身份)
                     $connection->uid = $msg['uid'];
                     break;
-    
+
                 // 从前端传递过来的数据  开始位置======================================================================
                 case "vue_get_order_record":                   //查询当前跟单订单
                     sendToTcp([
@@ -116,7 +114,7 @@ $workerWs->onMessage = function ($connection, $data) {
                         'data'=> $msg['data'],
                     ]);
                     break;
-    
+
                 case "vue_retry":                               //Retry请求
                     sendToTcp([
                         'type' => 'retry',
@@ -124,8 +122,8 @@ $workerWs->onMessage = function ($connection, $data) {
                     ]);
                     break;
                 //从前端传递过来的数据  结束位置==================================================================
-    
-    
+
+
                 //从接口过来的数据  开始位置================(这里的数据是一条一条返回的)==============================================
                 case "get_order_record":                   //查询当前跟单订单
                     sendToWeb([
@@ -157,7 +155,7 @@ $workerWs->onMessage = function ($connection, $data) {
                 case "insert":                             //插入发送内容
                     sendToWeb([
                         'type'       => $msg['type'],
-                        'orig_order' => $msg['orig_order'],
+                        'orig_order' => $msg['orig_position'],
                         'orig_login' => $msg['orig_login'],
                         'dest'       => $msg['dest']
                     ]);
@@ -165,7 +163,7 @@ $workerWs->onMessage = function ($connection, $data) {
                 case "ErrorInsert":                             //插入发送内容
                     sendToWeb([
                         'type'       => $msg['type'],
-                        'orig_order' => $msg['orig_order'],
+                        'orig_order' => $msg['orig_position'],
                         'orig_login' => $msg['orig_login'],
                         'dest'       => $msg['dest']
                     ]);
@@ -173,7 +171,7 @@ $workerWs->onMessage = function ($connection, $data) {
                 case "rollback":                           //Rollback请求
                     sendToWeb([
                         'type'       => $msg['type'],
-                        'orig_order' => $msg['orig_order'],
+                        'orig_order' => $msg['orig_position'],
                         'orig_login' => $msg['orig_login'],
                         'desc'       => $msg['desc']
                     ]);
@@ -186,7 +184,7 @@ $workerWs->onMessage = function ($connection, $data) {
                         'desc'       => $msg['desc']
                     ]);
                     break;
-    
+
                 case "retry":                             //Retry请求
                     sendToWeb([
                         'type'       => $msg['type'],
@@ -194,10 +192,10 @@ $workerWs->onMessage = function ($connection, $data) {
                         'orig_login' => $msg['orig_login'],                //最初的login
                         'desc'       => $msg['desc']
                     ]);
-                    break;    
-    
+                    break;
+
                 //从接口过来的数据 结束位置========================(这里的数据是一条一条返回的)==============================================    
-    
+
                 default:
                     $results['type'] = 'info';
                     $results['data'] = '未知类型';

+ 3 - 3
thinkphp/application/config.php

@@ -8,12 +8,13 @@
 // +----------------------------------------------------------------------
 // | Author: liu21st <liu21st@gmail.com>
 // +----------------------------------------------------------------------
-
+$db_con2 = require_once ('database2.php');
 return [
     // +----------------------------------------------------------------------
     // | 应用设置
     // +----------------------------------------------------------------------
-
+    //数据库2
+    'db_con2' => $db_con2,
     // 应用调试模式
     'app_debug'              => true,
     // 应用Trace
@@ -141,7 +142,6 @@ return [
         // 标签库标签结束标记
         'taglib_end'   => '}',
     ],
-
     // 视图输出字符串内容替换
     'view_replace_str'       => [],
     // 默认跳转页面对应的模板文件

+ 56 - 0
thinkphp/application/database2.php

@@ -0,0 +1,56 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author: liu21st <liu21st@gmail.com>
+// +----------------------------------------------------------------------
+
+return [
+    // 数据库类型
+    'type'            => 'mysql',
+    // 服务器地址
+    'hostname'        => '43.249.29.218',
+    // 数据库名
+    'database'        => 'mt5backup',
+
+    // 用户名
+    'username'        => 'mt5devel',
+    // 密码
+    'password'        => 'Pn9OZuvfmJFGZf4qsDQuYA32q3ryVPV0',
+    // 端口
+    'hostport'        => '23891',
+    // 连接dsn
+    'dsn'             => '',
+    // 数据库连接参数
+    'params'          => [],
+    // 数据库编码默认采用utf8
+    'charset'         => 'utf8',
+    // 数据库表前缀
+    'prefix'          => '',
+    // 数据库调试模式
+    'debug'           => true,
+    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
+    'deploy'          => 0,
+    // 数据库读写是否分离 主从式有效
+    'rw_separate'     => false,
+    // 读写分离后 主服务器数量
+    'master_num'      => 1,
+    // 指定从服务器序号
+    'slave_no'        => '',
+    // 自动读取主库数据
+    'read_master'     => false,
+    // 是否严格检查字段是否存在
+    'fields_strict'   => true,
+    // 数据集返回类型
+    'resultset_type'  => 'array',
+    // 自动写入时间戳字段
+    'auto_timestamp'  => false,
+    // 时间字段取出后的默认时间格式
+    'datetime_format' => 'Y-m-d H:i:s',
+    // 是否需要进行SQL性能分析
+    'sql_explain'     => false,
+];

+ 62 - 42
thinkphp/application/index/controller/Index.php

@@ -4,9 +4,10 @@ use think\Controller;
 use think\Request;
 use think\Db;
 use think\Session;
-class Index extends ApiCommon
+class Index extends controller
 {
 
+
     /**
      * 通配符转换
      * @param $str
@@ -50,23 +51,32 @@ class Index extends ApiCommon
     public function getuser(Request $request){
         if ($request->isPost()){
             $data = input();
-            $group = isset($data['group'])?$data['group']:'';          //组
-            $user  = isset($data['user'])?$data['user']:'';            //用户
-            $order  = isset($data['order'])?$data['order']:'';         //用户
-             
+            $group = isset($data['group']) ? $data['group']:'';          //组
+            $user  = isset($data['user']) ? $data['user']:'';            //用户
+            $order  = isset($data['order']) ? $data['order']:'';         //用户
+
             $groupArr = explode(",", $group);                             //使用字符串切割
             $user  = explode(",", $user);                              //使用字符串切割
             $where1=[];              //通配查询
-            $where['Group'] = ['in',$groupArr];       //精准选择(组的成员)
             $whereuser['Login']=['in',$user];      //精准选择(用户成员)
-
-            if(strpos($group,'*') !== false || strpos($group,'?')){//判断是否存在通配查询
-                $wildcardStr = $this->wildcard($group);
-                $str = $this->slashEscap($wildcardStr);
+            $str = "";
+            $likeData = [];
+           foreach ($groupArr as $key=>$value){
+               if(strpos($value,'*') !== false || strpos($value,'?') !== false){//判断是否存在通配查询
+                   $wildcardStr = $this->wildcard($value);
+                   $str = $this->slashEscap($wildcardStr);
+                   $likeData[] = ["like",$str];
+                   $where1['group'] = $likeData;
+                   unset($groupArr[$key]);
+               }
+           }
+            if(count($likeData) == 1){
                 $where1['group'] = ["like",$str];
             }
 
-            $result = Db::name('mt5_users')->where($where)->whereOr($where1)->whereOr($whereuser)->distinct(true)->select();
+            $where['Group'] = ['in',$groupArr];       //精准选择(组的成员);
+            $result = Db::connect("db_con2")->name('mt5_users')->where($where)->whereOr($where1)->whereOr($whereuser)->distinct(true)->select();
+
             $result1 = Db::name('order_progress')->where(['orig_order'=>$order])->select();  //筛选函数(当前跟踪的订单)
 
             //外层筛选出来之前做过的订单
@@ -114,40 +124,53 @@ class Index extends ApiCommon
             $data = input(); //获取订单的信息
 
             //获取deals表中的信息 判断订单是否平仓 entry为0是正  entry为1时是负
-            $deals = Db::query("select count(*) as 'num' from mt5_deals  WHERE PositionID = {$data['orderid']} group by entry ");
-            $getDeal =  Db::query("select Deal as 'deal' from mt5_deals  WHERE PositionID = {$data['orderid']}");
-            $getDeals = array_column($getDeal,'deal');
+            $deals = Db::connect("db_con2")->query("select count(*) as 'num' from mt5_deals  WHERE PositionID = {$data['orderid']} group by entry ");
+
             $deal = array_column($deals,'num');
             if(!$deals || $deal['0'] != $deal['1']){
                 return json(['code'=>'01','msg'=>'没有找到匹配的订单']);
             }
-            //查询该positionID的所有order
-            $result = Db::query("SELECT `Order` FROM mt5_orders_history WHERE PositionID = {$data['orderid']}");
+
             //查询开仓信息
-            $openResult = Db::query("SELECT PriceCurrent,TimeSetup FROM mt5_orders_history WHERE PositionID={$data['orderid']} and TimeSetup = (SELECT MIN(TimeSetup) FROM mt5_orders_history WHERE PositionID={$data['orderid']})");
+            $openResult = Db::connect("db_con2")->query("SELECT PriceCurrent,TimeSetup FROM mt5_orders_history WHERE PositionID={$data['orderid']} and TimeSetup = (SELECT MIN(TimeSetup) FROM mt5_orders_history WHERE PositionID={$data['orderid']})")[0];
+
             //通过deals表查询盈利
-            $earnings = Db::query("SELECT SUM(Commission) as commission,SUM(Profit) as profit FROM mt5_deals WHERE PositionID={$data['orderid']}")[0];
+            $earnings = Db::connect("db_con2")->query("SELECT SUM(Commission) as commission,SUM(Profit) as profit FROM mt5_deals WHERE PositionID={$data['orderid']}")[0];
 
             //查询关仓信息
-            $closeResult = Db::query("SELECT PriceCurrent,TimeDone,Login,PositionID,Symbol,VolumeInitial,PriceTP,PriceSL FROM mt5_orders_history WHERE PositionID={$data['orderid']} and TimeDone = (SELECT MAX(TimeDone) FROM mt5_orders_history WHERE PositionID={$data['orderid']})");
+            $closeResult = Db::connect("db_con2")->query("SELECT PriceCurrent,TimeDone,Login,PositionID,Symbol,VolumeInitial,PriceTP,PriceSL FROM mt5_orders_history WHERE PositionID={$data['orderid']} and TimeDone = (SELECT MAX(TimeDone) FROM mt5_orders_history WHERE PositionID={$data['orderid']})")[0];
+
+            //获取订单的所有deal
+            $getDeal =  Db::connect("db_con2")->query("select Deal as 'deal' from mt5_deals  WHERE PositionID = {$data['orderid']}");
+
+            //查询该positionID的所有order
+            $result = Db::connect("db_con2")->query("SELECT `Order` FROM mt5_orders_history WHERE PositionID = {$data['orderid']}");
+
+            $getDeals = array_column($getDeal,'deal');
+            $order = array_column($result,'Order');
 
             if($closeResult && $result && $openResult){
-                $closeResult['OPEN_PRICE'] = $openResult['0']["PriceCurrent"];
-                $closeResult['OPEN_TIME'] = $openResult['0']["TimeSetup"];
-                $closeResult['CLOSE_TIME'] = $closeResult['0']['TimeDone'];
-                $closeResult['CLOSE_PRICE'] = $closeResult['0']['PriceCurrent'];
-                $closeResult['LOGIN'] = $closeResult['0']['Login'];
-                $closeResult['TICKET'] = $closeResult['0']['PositionID'];
-                $closeResult['SYMBOL'] = $closeResult['0']['Symbol'];
-                $closeResult['VOLUME'] = $closeResult['0']['VolumeInitial'];
-                $closeResult['TP'] = $closeResult['0']['PriceTP'];
-                $closeResult['SL'] = $closeResult['0']['PriceSL'];
-                $closeResult['PROFIT'] = $earnings['profit'];
-                $closeResult['COMMISSION'] = $earnings['commission'];
-                $order = array_column($result,'Order');
-                $send = ['orders'=>$order,'from'=>strtotime($openResult[0]['TimeSetup'])-1,'to'=>strtotime($closeResult[0]['TimeDone'])+1,'login'=>$closeResult['0']['Login'],'deals'=>$getDeals];
-                $closeResult['send'] = $send;
-                return json(['code'=>'00','data'=>$closeResult,'msg'=>'获得数据成功']);
+
+                //发送set_current_postion 数据
+                $send = ['orders'=>$order,'from'=>strtotime($openResult['TimeSetup'])-1,'to'=>strtotime($closeResult['TimeDone'])+1,'login'=>$closeResult['Login'],'deals'=>$getDeals];
+
+                $data = [
+                    'OPEN_PRICE'=>$openResult["PriceCurrent"],
+                    'OPEN_TIME'=>$openResult["TimeSetup"],
+                    'CLOSE_TIME'=>$closeResult['TimeDone'],
+                    'CLOSE_PRICE'=> $closeResult['PriceCurrent'],
+                    'LOGIN'=>$closeResult['Login'],
+                    'TICKET' => $closeResult['PositionID'],
+                    'SYMBOL' => $closeResult['Symbol'],
+                    'VOLUME' => $closeResult['VolumeInitial'],
+                    'TP' => $closeResult['PriceTP'],
+                    'SL' =>  $closeResult['PriceSL'],
+                    'PROFIT' => $earnings['profit'],
+                    'COMMISSION' => $earnings['commission'],
+                    'send' => $send
+                ];
+
+                return json(['code'=>'00','data'=>$data,'msg'=>'获得数据成功']);
 
             }else{
 
@@ -226,9 +249,6 @@ class Index extends ApiCommon
             $data = input();                                              //获取传递的信息
             $password = md5($data['password']);                           //获取加密后的密码
 
-
-
-
             //根据用户来选择数据
             if($data['nickname']=="普通管理员"){
                 $result = Db::name('admin')->where(['id'=>1])->find();        //找到用户(获取原始的密码)
@@ -256,17 +276,17 @@ class Index extends ApiCommon
 
     public function update_percentage(Request $request){
         if ($request->isPost()){
-            
+
             $data = input();                                              //获取传递的信息
             $update_array =[];
             foreach ($data as $key => $value) {
-                $result =  Db::name('mt4_users')->where(['LOGIN'=>$value])->find();
-                $update_array[$value]= $result['BALANCE'];
+                $result =  Db::connect("db_con2")->name('mt5_users')->where(['Login'=>$value])->find();
+                $update_array[$value]= $result['Balance'];
             }
             if($update_array){
                 return json(['code'=>'00','data'=>$update_array,'msg'=>'请求数据成功']);
             }else{
-                return json(['code'=>'01','data'=>$update_array,'msg'=>'请求数据有误']); 
+                return json(['code'=>'01','data'=>$update_array,'msg'=>'请求数据有误']);
             }
         }else{
 

+ 123 - 3
vue-admin-master/src/views/nav1/Table.vue

@@ -617,10 +617,11 @@
 			//失败订单insert
 			ErrorInsert:function() {
 				
-				var _this = this;
+				/*var _this = this;
 				this.$confirm('确认操作吗?', '提示', {
 					//type: 'warning'
 				}).then(() => {
+					
 					console.log('ErrorInsert函数');
                     // 二次确认密码
 					this.$prompt('请输入密码', '提示', {
@@ -653,8 +654,9 @@
 										_this.retry_sels[i].LOGIN = parseInt(_this.retry_sels[i].dest_login);
 										_this.retry_sels[i].ladder = parseInt(_this.retry_sels[i].percentage);
 									}
-									data_insert.orderid = _this.retry_sels[i].orig_order;
-									data_insert.data = _this.retry_sels;								
+									data_insert.orderid = _this.filters.orderid;
+									data_insert.data = _this.retry_sels;
+									console.log(data_insert);		return false;						
 									// 发送socket
 									_this.socket.send(JSON.stringify(data_insert));
 
@@ -676,8 +678,126 @@
 
 				}).catch(() => {
 
+                    console.log("取消了");
+				});*/
+			
+
+			//-----------------------------------------
+
+				var _this = this;
+				this.$confirm('确认Retry操作吗?', '提示', {
+					//type: 'warning'
+				}).then(() => {
+					console.log('retry函数');
+                    this.$prompt('请输入密码', '提示', {
+						confirmButtonText: '确定',
+						cancelButtonText: '取消',
+					}).then(({ value }) => {
+                        if(!(_this.filters.step)){
+							this.$message.error("请填写Step信息");
+							return false;
+						}
+						if(!(_this.filters.tolerance)){
+							this.$message.error("请填写Tolerance信息");
+							return false;
+						}	
+						var loginParams = { password: value,nickname:JSON.parse(sessionStorage.getItem('user'))};
+						// 向后台请求密码的正确性
+						_this.$api.post('/api/index/index/querypassword',loginParams, response => {
+							if (response.status == 200 && response.status < 300) {
+								let { msg, code } = response.data;
+								if(code=="00"){
+                                    console.log(_this.retry_sels);
+									var retry_obj =[]; //空数组
+                                    _this.retry_sels.forEach(element => {
+										retry_obj.push(element.dest_login);      //获取到数组的login数据
+									});
+
+									// 重新更新retry中数据的  percentage  的数据
+                                    _this.$api.post('/api/index/index/update_percentage',retry_obj, response => {
+										if (response.status == 200 && response.status < 300) {
+											 let { msg, code , data} = response.data;
+
+											//对请求的数量进行格式的梳理
+											if(code=="00"){
+												var data_arr = []
+												for (let i in data) {
+													let o = {};
+													o[i] = data[i];
+													data_arr.push(o);
+												}
+
+
+											    //获取到数据   
+												data_arr.forEach((element,index) => {
+														_this.retry_sels.forEach(element1 => {
+															
+															// 对所有的数据重新进行更新梯度操作
+															if(element[element1.dest_login]){
+																let balance = element[element1.dest_login]; //获取到的余额  percentage
+																_this.$set(element1,'LOGIN',element1.dest_login);
+																if(balance<_this.filters.step){
+																		if( balance >= _this.filters.tolerance){
+																			_this.$set(element1,'ladder',1);
+																		}else{
+																			_this.$set(element1,'ladder',0);
+																		}
+																		
+																}else{
+																		
+																		_this.$set(element1,'ladder',parseInt(balance/_this.filters.step));
+																	}
+															
+															}
+														});
+												});
+
+											    if(_this.retry_sels.length==0){
+													_this.$message.error("没有任何选择");
+													return false;
+												}
+
+											   //对改变完成的数据进行发送
+												_this.retry_index =0;
+											
+												_this.loading_retry = true;
+												_this.dialogVisible = true;
+												let data_insert={};
+												data_insert.type = 'vue_insert'; 
+												data_insert.message = 'ErrorInsert';
+												data_insert.orderid = _this.filters.orderid;
+												data_insert.data = _this.retry_sels;
+												
+												// 发送socket
+												_this.socket.send(JSON.stringify(data_insert));
+
+											}else{
+											   console.log(response.msg);
+											}
+										} else {
+											console.log(response.message);
+										}
+									});
+									
+								}else{
+									this.logining = false;
+									this.$message.error(msg);
+								}
+							} else {
+								this.logining = false;
+								console.log(response.message);
+							}
+						});
+					}).catch(() => {
+						this.$message({
+							type: 'info',
+							message: '取消输入'
+						});       
+					});
+				}).catch(() => {
                     console.log("取消了");
 				});
+
 			},
             //rollback函数
 			Rollback:function() {