فهرست منبع

上线最后修改

Candy 6 سال پیش
والد
کامیت
84ef8f5f8a

+ 1 - 1
thinkphp/TCPserver/config.php

@@ -16,6 +16,6 @@ define('DB_HOST', '103.230.218.164');
 define('DB_PORT', 3306);
 define('DB_USERNAME', 'root');
 define('DB_PASSWORD', 'titan666');
-define('BALANCE_URL','http://127.0.0.1:9000');
+define('BALANCE_URL','http://120.25.77.133:9001');
 define('LOGIN','666666');
 define('PASSWORD','kobe19879151');

+ 87 - 47
thinkphp/TCPserver/tcpServer.php

@@ -20,15 +20,18 @@ date_default_timezone_set("PRC");
 
 //初始化  (创建了一个tcp服务)
 
-$workerTcp = new Worker("tcp://0.0.0.0:12346");
+$workerTcp = new Worker("tcp://0.0.0.0:12347");
 
 $workerTcp->name = "TCP";
-
 $workerTcp::$logFile = __DIR__.'/workerman.log';
+$path = "displaylog/".date('Ym', time());
+createdir($path);
+$workerTcp::$stdoutFile = __DIR__."/".$path."/".date("Ymd",time()).'.log';
+
 $num = 1;
 
 $workerTcp->onWorkerStart = function ($workerTcp) {
-    global $dbMt5;
+
     global $db;                                  //数据库
     global $con;                                 //访问本地创建的webserver服务器
     global $connection_to_tcp;                   //访问接口服务器(远程的)
@@ -51,10 +54,9 @@ $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:12381");
+    $con            = new AsyncTcpConnection("ws://127.0.0.1:12382");
     $con->onConnect = function ($on) {
         global $index;
         global $rollback_index;
@@ -115,7 +117,7 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
 
             global $rollback_index;  //传递index
             global $rollback_data;   //全局的数据
-            $rollback_data = array_chunk($msg['data'], 5);      //每几个是一个数组
+            $rollback_data = array_chunk($msg['data'], 8);      //每几个是一个数组
             send_rollback($rollback_data, $rollback_index);
 
         }
@@ -138,7 +140,7 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
     };
     $con->onClose   = function ($con) {
         echo "connection closed\n";
-        $con->reConnect(1);
+        //$con->reConnect(1);
     };
 
     $con->onError = function ($con, $code, $msg) {
@@ -175,7 +177,7 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
         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)
@@ -204,10 +206,10 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
         // 定时发送心跳信息
         global $connection_count;
 
-        if($connection_count){
+        /*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");
@@ -215,13 +217,13 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
                 // 接口服务器向我发送的信息
                 $connection_to_tcp->onMessage = function ($connection_to_tcp, $data) {
 
-                    tcpMessHandle($data);
+                   tcpMessHandle($data);
                 };
 
                 $connection_to_tcp->onClose = function($connection_to_tcp)
                 {
 
-                    echo "connection closed\n";
+                   echo "connection closed\n";
                     log_file("to_tcp connection closed\n");
 
                     // $connection_to_tcp->reConnect();  //执行连接
@@ -231,24 +233,24 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
                 {
                     echo "Error code:$code msg:$msg\n";
                 };
+                  $connection_to_tcp->connect();  //客户端上线重新连接接口
 
             }else{
                 //客户端不在线
-                $connection_to_tcp->close();
+               $connection_to_tcp->close();
             }
-        }
+        }*/
         $con->send(json_encode(['type' => 'heartbeat']). "\n");
     });
 
 
-    /*Timer::add(,function(){
-         global $token;
-        refreshToken();
+    Timer::add(1800,function(){
 
+        getToken();
 
-     });*/
+    });
     // 心跳检测(TCP 所有客户端) 心跳===================================================
-    Timer::add(30, function () use ($workerTcp) {
+    Timer::add(1, function () use ($workerTcp) {
         $time_now = time();      //当前时间
         foreach ($workerTcp->connections as $connection) {
             // 有可能该connection还没收到过消息,则lastMessageTime设置为当前时间
@@ -264,6 +266,11 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
         }
     });
 
+    //避免数据库长时间未操作连接超时
+    Timer::add(25200,function(){
+        global $db;
+        $db->query("select username from admin limit 1");
+    });
 };
 
 $workerTcp->onConnect = function ($connection) {
@@ -327,8 +334,7 @@ function tcpMessHandle($data)
         }
 
         // 接口服务器返回的信息
-        echo "接口返回数据";
-        var_dump($msg);
+
         if ($msg['type'] == "get_order_record") {      //查询订单状态
             $recv_buffer = "";
             /* if (!isset($msg['seqnum'])) {
@@ -350,6 +356,9 @@ function tcpMessHandle($data)
 
         if ($msg['type'] == "insert") {                //Insert请求 (有数据库操作,插入)
             $recv_buffer = "";
+            echo '接口返回数据';
+            curenttime();
+            var_dump($msg);
             /* if (!isset($msg['seqnum'])) {
                  return false;
              }
@@ -374,6 +383,11 @@ function tcpMessHandle($data)
             $arr = "";
             $time = time();
             $delete_sql = 'delete from order_progress where ';
+            foreach($insert_data as $key=>$value){
+                $insert_data[$key]['dest_orders'] =json_encode($value['dest_orders'],JSON_FORCE_OBJECT);
+                $insert_data[$key]['dest_deals'] = json_encode($value['dest_deals'],JSON_FORCE_OBJECT);
+            }
+
 
             foreach ($insert_data as $key => $value) {
 
@@ -382,13 +396,13 @@ function tcpMessHandle($data)
                 } else {
                     if($message == 1){
                         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 . ")" . ",";
+                            $arr .= "(" . "'{$msg['type']}'" . "," . $msg['orig_position'] . "," . $msg['orig_login'] . "," . $value['dest_login'] . "," . $value['dest_position'] . "," . $value['percentage'] . "," . $value['profit'] . "," . $value['error_code'] . "," . $time .",". "'".$value['dest_orders']."'".","."'".$value['dest_deals']."'".")" . ",";
                             $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_position'] . "," . $msg['orig_login'] . "," . $value['dest_login'] . "," . $value['dest_position'] . "," . $value['percentage'] . "," . $value['profit'] . "," . $value['error_code'] . "," . $time . ")" . ",";
+                        $arr .= "(" . "'{$msg['type']}'" . "," . $msg['orig_position'] . "," . $msg['orig_login'] . "," . $value['dest_login'] . "," . $value['dest_position'] . "," . $value['percentage'] . "," . $value['profit'] . "," . $value['error_code'] . "," . $time .","."'".$value['dest_orders']."'".","."'".$value['dest_deals']."'". ")" . ",";
                         if($value['error_code'] == 0){
 
                             $login .= $value['dest_login'].",";
@@ -401,22 +415,25 @@ function tcpMessHandle($data)
             }
 
 
-            $filed = "type,orig_order,orig_login,dest_login,dest_order,percentage,profit,error_code,addtime";
+            $filed = "type,orig_order,orig_login,dest_login,dest_order,percentage,profit,error_code,addtime,dest_orders,dest_deals";
             $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);
+
+            //$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 ');
                     $db->query($delete_sql);
                     $db->query($sql);
-                    $db->query($sql2);
+                    //$db->query($sql2);
                 }
 
             }else{
-                $db->query($sql);
-                $db->query($sql2);
+                $data = $db->query($sql);
+
+
+                // $db->query($sql2);
             }
 
 
@@ -434,6 +451,8 @@ function tcpMessHandle($data)
             sendToWebServer($msg); //发送给前端
         }
         if ($msg['type'] == "rollback") {              //Rollback请求 (有数据库操作,插入并看看是否需要直接返回给前端)
+            echo '接口返回数据'.curenttime();
+            var_dump($msg);
             $recv_buffer = "";
             /*  if (!isset($msg['seqnum'])) {
                   return false;
@@ -455,14 +474,14 @@ function tcpMessHandle($data)
 
             sendToWebServer($msg);       //发送给前端
             $delete_sql = 'delete from order_progress where ';
-            $insert_sql = "insert into order_save(type,orig_order,orig_login,dest_login,dest_orders,dest_deals,percentage,error_code,addtime) values";
+            /*  $insert_sql = "insert into order_save(type,orig_order,orig_login,dest_login,dest_orders,dest_deals,percentage,error_code,addtime) values";*/
 
             $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){
+                  $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) {
 
@@ -474,8 +493,8 @@ function tcpMessHandle($data)
                     if ($value['error_code'] == 0) {
 
                         $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),";
+
+                        /*$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 {
                         //不成功把参数组装数组以便批量修改
@@ -501,18 +520,18 @@ function tcpMessHandle($data)
             //成功执行删除后增加数据
             if ($delete_sql != 'delete from order_progress where ') {
                 $delete_sql = trim($delete_sql, 'or ');
-                $insert_sql = substr($insert_sql, 0, -1);
+                //$insert_sql = substr($insert_sql, 0, -1);
                 $db->query($delete_sql);
-                $db->query($insert_sql);
+                // $db->query($insert_sql);
+
                 if($login){
 
                     $logins = substr($login,0,-1);
-                    var_dump($logins);
+
                     balancefix($logins);
 
                 }
 
-
             }
 
         }
@@ -660,7 +679,7 @@ function sendTo_tcp_Server($data){
     global $seqnum;
     // $data['seqnum'] = $seqnum;
     log_file($data);
-    echo "发送给接口的信息";
+    echo "发送给接口的信息".curenttime();
     var_dump($data);
     $connection_to_tcp->send(json_encode($data) . "\n");
 }
@@ -684,19 +703,19 @@ function send_insert($data,$index=0,$order){
 // rollback 数据
 function send_rollback($data,$index=0){
 
-    global $dbMt5;
+    global $db;
     $send['type'] = "rollback_some";
     $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];                                   //将分割的数据交给全局变量
+
     foreach ($send_data as $key => $value) {
-        $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']}");
+        //$order = $db->query("SELECT `Order`,`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['dest_orders'] = json_decode($value['dest_orders'],true);   //订单号
+        $send_child['dest_deals'] = json_decode($value['dest_deals'],true);
         $send_child['percentage'] = (int)$value['percentage'];
         array_push($send['desc'],$send_child);
     }
@@ -823,8 +842,11 @@ function  balancefix($logins)
     $params = ['logins'=>$logins,'token'=>$token];
     $data = http(BALANCE_URL.$requestApi,$params,"POST");
     $data = json_decode($data,true);
+    echo 'balancefix';
+    curenttime();
     var_dump($data);
     if(!$data){
+        log_file("send balancefix Invalid\n");
         getToken();
         balancefix($logins);
     }
@@ -879,13 +901,13 @@ function http($url, $params, $method = 'GET', $header = array(), $timeout = 5)
 }
 
 //程序执行时间秒速
-/*function curenttime()
+function curenttime()
 {
     $t = microtime(true);
     $micro = sprintf("%06d",($t - floor($t)) * 1000000);
     $d = new DateTime( date('Y-m-d H:i:s.'.$micro, $t) );
     print $d->format("Y-m-d H:i:s.u"); // note at point on "u"
-}*/
+}
 
 
 
@@ -917,5 +939,23 @@ function log_file($data){
     error_log(date("Y-m-d H:i:s", time()).' ===== info: '.$data."\n",3,__DIR__ . '/log/' . date("Ymd", time()) . '.log');
 }
 
+function createdir($path) {
+    // 判断传过来的$path是否已是目录,若是,则直接返回true
+    if(is_dir($path)) {
+        return true;
+    }
+
+    // 走到这步,说明传过来的$path不是目录
+    // 判断其上级是否为目录,是,则直接创建$path目录
+    if(is_dir(dirname($path))) {
+        return mkdir($path);
+    }
 
+    // 走到这说明其上级目录也不是目录,则继续判断其上上...级目录
+    createdir(dirname($path));
+
+    // 走到这步,说明上级目录已创建成功,则直接接着创建当前目录,并把创建的结果返回
+    return mkdir($path);
+
+}
 Worker::runAll();   // 执行函数

+ 15 - 5
thinkphp/TCPserver/test.php

@@ -13,12 +13,16 @@ use Workerman\Lib\Timer;                          //定时器函数
 use Monolog\Logger;
 use Monolog\Handler\StreamHandler;
 use Monolog\Handler\ErrorLogHandler;
+
 $task = new Worker();
+
 // 进程启动时异步建立一个到www.baidu.com连接对象,并发送数据获取数据
 $task->onWorkerStart = function($task)
 {
+    global $mark;
+    $mark = true;
     // 不支持直接指定http,但是可以用tcp模拟http协议发送数据
-    $connection_to_baidu = new AsyncTcpConnection('tcp://47.254.202.24:10009');
+    $connection_to_baidu = new AsyncTcpConnection('tcp://127.0.0.1:12345');
     // 当连接建立成功时,发送http请求数据
 
         $connection_to_baidu->onConnect = function($connection_to_baidu)
@@ -32,22 +36,28 @@ $task->onWorkerStart = function($task)
         };
         $connection_to_baidu->onClose = function($connection_to_baidu)
         {
+
+            var_dump($connection_to_baidu);
+            //$connection_to_baidu->reConnect();
             echo "connection closed\n";
         };
         $connection_to_baidu->onError = function($connection_to_baidu, $code, $msg)
         {
+            //$connection_to_baidu->reConnect();
+            echo '111';
             echo "Error code:$code msg:$msg\n";
         };
 
-    var_dump($connection_to_baidu);
+
     $connection_to_baidu->connect();
     // 发送给 webserver 服务器  心跳=====================================================
 
     Timer::add(10, function () use ($connection_to_baidu) {
+        global $mark;
        $connection_to_baidu->close();
-
+        $mark = false;
     });
-    Timer::add(11, function () use ($connection_to_baidu) {
+   /* Timer::add(11, function () use ($connection_to_baidu) {
 
         $connection_to_baidu->onConnect = function($connection_to_baidu)
         {
@@ -67,7 +77,7 @@ $task->onWorkerStart = function($task)
             echo "Error code:$code msg:$msg\n";
         };
         $connection_to_baidu->connect();
-    });
+    });*/
 };
 
 // 运行worker

+ 45 - 0
thinkphp/TCPserver/workerman.log

@@ -2307,3 +2307,48 @@ Stack trace:
 #11 D:\kshmt5\thinkphp\TCPserver\tcpServer.php(897): Workerman\Worker::runAll()
 #12 {main}
 2019-07-30 16:25:07 pid:1 Worker process terminated
+2019-08-22 15:42:41 pid:1 Worker process terminated with ERROR: E_ERROR "Uncaught PDOException: SQL:SELECT Login FROM `mt5_user` SQLSTATE[42000]: Syntax error or access violation: 1142 SELECT command denied to user 'mt5devel'@'119.123.126.241' for table 'mt5_user' in D:\kshmt5\thinkphp\vendor\mysql\src\Connection.php:1772
+Stack trace:
+#0 D:\kshmt5\thinkphp\vendor\mysql\src\Connection.php(1870): Workerman\MySQL\Connection->execute('SELECT Login FR...', Array)
+#1 D:\kshmt5\thinkphp\TCPserver\tcpServer.php(270): Workerman\MySQL\Connection->column()
+#2 [internal function]: {closure}()
+#3 D:\kshmt5\thinkphp\vendor\workerman\Events\Select.php(233): call_user_func_array(Object(Closure), Array)
+#4 D:\kshmt5\thinkphp\vendor\workerman\Events\Select.php(277): Workerman\Events\Select->tick()
+#5 D:\kshmt5\thinkphp\vendor\workerman\Worker.php(2235): Workerman\Events\Select->loop()
+#6 D:\kshmt5\thinkphp\vendor\workerman\Worker.php(1225): Workerman\Worker->run()
+#7 D:\kshmt5\thinkphp\vendor\workerman\Worker.php(1168): Workerman\Worker::forkWorkersForWindows()
+#8 D:\kshmt5\thinkphp\vendor\workerma in D:\kshmt5\thinkphp\vendor\mysql\src\Connection.php on line 1772"
+2019-08-22 15:44:56 pid:1 Worker process terminated with ERROR: E_ERROR "Uncaught PDOException: SQL:SELECT Login FROM `mt5_user` SQLSTATE[42000]: Syntax error or access violation: 1142 SELECT command denied to user 'mt5devel'@'119.123.126.241' for table 'mt5_user' in D:\kshmt5\thinkphp\vendor\mysql\src\Connection.php:1772
+Stack trace:
+#0 D:\kshmt5\thinkphp\vendor\mysql\src\Connection.php(1924): Workerman\MySQL\Connection->execute('SELECT Login FR...', Array)
+#1 D:\kshmt5\thinkphp\TCPserver\tcpServer.php(270): Workerman\MySQL\Connection->single()
+#2 [internal function]: {closure}()
+#3 D:\kshmt5\thinkphp\vendor\workerman\Events\Select.php(233): call_user_func_array(Object(Closure), Array)
+#4 D:\kshmt5\thinkphp\vendor\workerman\Events\Select.php(277): Workerman\Events\Select->tick()
+#5 D:\kshmt5\thinkphp\vendor\workerman\Worker.php(2235): Workerman\Events\Select->loop()
+#6 D:\kshmt5\thinkphp\vendor\workerman\Worker.php(1225): Workerman\Worker->run()
+#7 D:\kshmt5\thinkphp\vendor\workerman\Worker.php(1168): Workerman\Worker::forkWorkersForWindows()
+#8 D:\kshmt5\thinkphp\vendor\workerma in D:\kshmt5\thinkphp\vendor\mysql\src\Connection.php on line 1772"
+2019-08-22 15:47:06 pid:1 Worker process terminated with ERROR: E_ERROR "Uncaught PDOException: SQL:select Login from mt5_user limit 1 SQLSTATE[42000]: Syntax error or access violation: 1142 SELECT command denied to user 'mt5devel'@'119.123.126.241' for table 'mt5_user' in D:\kshmt5\thinkphp\vendor\mysql\src\Connection.php:1772
+Stack trace:
+#0 D:\kshmt5\thinkphp\vendor\mysql\src\Connection.php(1830): Workerman\MySQL\Connection->execute('select Login fr...', NULL)
+#1 D:\kshmt5\thinkphp\TCPserver\tcpServer.php(270): Workerman\MySQL\Connection->query('select Login fr...')
+#2 [internal function]: {closure}()
+#3 D:\kshmt5\thinkphp\vendor\workerman\Events\Select.php(233): call_user_func_array(Object(Closure), Array)
+#4 D:\kshmt5\thinkphp\vendor\workerman\Events\Select.php(277): Workerman\Events\Select->tick()
+#5 D:\kshmt5\thinkphp\vendor\workerman\Worker.php(2235): Workerman\Events\Select->loop()
+#6 D:\kshmt5\thinkphp\vendor\workerman\Worker.php(1225): Workerman\Worker->run()
+#7 D:\kshmt5\thinkphp\vendor\workerman\Worker.php(1168): Workerman\Worker::forkWorkersForWindows()
+#8 D:\kshmt5\ in D:\kshmt5\thinkphp\vendor\mysql\src\Connection.php on line 1772"
+2019-08-26 09:30:15 pid:1 Worker process terminated with ERROR: E_ERROR "Uncaught PDOException: SQLSTATE[HY000] [2002] 向一个无法连接的网络尝试了一个套接字操作。
+ in D:\kshmt5\thinkphp\vendor\mysql\src\Connection.php:1711
+Stack trace:
+#0 D:\kshmt5\thinkphp\vendor\mysql\src\Connection.php(1711): PDO->__construct('mysql:dbname=mt...', 'mt5devel', 'Pn9OZuvfmJFGZf4...', Array)
+#1 D:\kshmt5\thinkphp\vendor\mysql\src\Connection.php(1752): Workerman\MySQL\Connection->connect()
+#2 D:\kshmt5\thinkphp\vendor\mysql\src\Connection.php(1830): Workerman\MySQL\Connection->execute('select Login fr...', NULL)
+#3 D:\kshmt5\thinkphp\TCPserver\tcpServer.php(270): Workerman\MySQL\Connection->query('select Login fr...')
+#4 [internal function]: {closure}()
+#5 D:\kshmt5\thinkphp\vendor\workerman\Events\Select.php(233): call_user_func_array(Object(Closure), Array)
+#6 D:\kshmt5\thinkphp\vendor\workerman\Events\Select.php(277): Workerman\Events\Select->tick()
+#7 D:\kshmt5\thinkphp\vendor\workerman\Worker.php(2235): Workerman\Events\Select->loop()
+#8 D:\kshmt5\thinkphp\vendor\workerman\Worker.php(1225): Wor in D:\kshmt5\thinkphp\vendor\mysql\src\Connection.php on line 1711"

+ 4 - 4
thinkphp/application/config.php

@@ -8,17 +8,17 @@
 // +----------------------------------------------------------------------
 // | Author: liu21st <liu21st@gmail.com>
 // +----------------------------------------------------------------------
-$db_con2 = require_once ('database2.php');
+
 return [
     // +----------------------------------------------------------------------
     // | 应用设置
     // +----------------------------------------------------------------------
-    //数据库2
-    'db_con2' => $db_con2,
+    
+  
     // 应用调试模式
     'app_debug'              => true,
     // 应用Trace
-    'app_trace'              => false,
+    'app_trace'              => true,
     // 应用模式状态
     'app_status'             => '',
     // 是否支持多模块

+ 3 - 3
thinkphp/application/database.php

@@ -16,7 +16,7 @@ return [
    //'hostname'        => 'st.titanera.com',
     //'hostname'        => '192.168.5.104',
     //'hostname'        => '192.168.5.110',
-    'hostname'        => '103.230.218.164',
+    'hostname'        => '47.106.182.13',
    // 'hostname'        => '',
     // 数据库名
     //'database'        => 'monk_live',
@@ -29,7 +29,7 @@ return [
     //'username'        => 'root',
     // 密码
     //'password'        => 'abc123',
-    'password'        => 'titan666',
+    'password'        => 'Elmo@666',
     //'password'        => 'root',
     // 端口
     'hostport'        => '',
@@ -62,5 +62,5 @@ return [
     // 时间字段取出后的默认时间格式
     'datetime_format' => 'Y-m-d H:i:s',
     // 是否需要进行SQL性能分析
-    'sql_explain'     => false,
+    'sql_explain'     => true,
 ];

+ 27 - 19
thinkphp/application/index/controller/Index.php

@@ -7,7 +7,6 @@ use think\Session;
 class Index extends controller
 {
 
-
     /**
      * 通配符转换
      * @param $str
@@ -54,7 +53,6 @@ class Index extends controller
             $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=[];              //通配查询
@@ -75,7 +73,7 @@ class Index extends controller
             }
 
             $where['Group'] = ['in',$groupArr];       //精准选择(组的成员);
-            $result = Db::connect("db_con2")->name('mt5_users')->where($where)->whereOr($where1)->whereOr($whereuser)->distinct(true)->select();
+            $result = Db::name('mt5_users')->where($where)->whereOr($where1)->whereOr($whereuser)->distinct(true)->select();
 
             $result1 = Db::name('order_progress')->where(['orig_order'=>$order])->select();  //筛选函数(当前跟踪的订单)
 
@@ -119,35 +117,52 @@ class Index extends controller
     //点击订单后获取到的信息
     public function getorder(Request $request){
 
+
         if ($request->isPost()){
 
             $data = input(); //获取订单的信息
+            $orderid = trim($data['orderid']);
+            if(!is_numeric($orderid)){
+                return json(['code'=>'01','msg'=>'请输入正确的数字类型']);
+            }
+
 
             //获取deals表中的信息 判断订单是否平仓 entry为0是正  entry为1时是负
-            $deals = Db::connect("db_con2")->query("select count(*) as 'num' from mt5_deals  WHERE PositionID = {$data['orderid']} group by entry ");
 
+            $deals = Db::query("select count(*) as 'num' from mt5_deals WHERE PositionID = {$orderid} and entry in (0,1) group by entry");
             $deal = array_column($deals,'num');
-            if(!$deals || $deal['0'] != $deal['1']){
+            if(!$deals || count($deals)<2 || $deal[0] != $deal[1]){
                 return json(['code'=>'01','msg'=>'没有找到匹配的订单']);
             }
 
+
+          /*  $deals1 = Db::query("select count(*) as 'num' from mt5_deals  WHERE PositionID = {$orderid} and Entry = 0 ");
+            $deals2 = Db::query("select count(*) as 'num' from mt5_deals  WHERE PositionID = {$orderid} and Entry = 1 ");
+            $deal1 = array_column($deals1,'num');
+            $deal2 = array_column($deals2,'num');
+            if( $deal1[0] != $deal2[0]){
+                return json(['code'=>'01','msg'=>'没有找到匹配的订单333333']);
+            }*/
+
             //查询开仓信息
-            $openResult = Db::connect("db_con2")->query("SELECT Price,Time FROM mt5_deals WHERE PositionID={$data['orderid']} and Time = (SELECT MIN(Time) FROM mt5_deals WHERE PositionID={$data['orderid']})")[0];
+            $openResult = Db::query("SELECT Price,Time FROM mt5_deals WHERE PositionID={$orderid} and Time = (SELECT MIN(Time) FROM mt5_deals WHERE PositionID={$orderid})");
 
             //通过deals表查询盈利
-            $earnings = Db::connect("db_con2")->query("SELECT SUM(Commission) as commission,SUM(Profit) as profit FROM mt5_deals WHERE PositionID={$data['orderid']}")[0];
+            $earnings = Db::query("SELECT SUM(Commission) as commission,SUM(Profit) as profit FROM mt5_deals WHERE PositionID={$orderid}");
 
             //查询关仓信息
-            $closeResult = Db::connect("db_con2")->query("SELECT Price,Time,Login,PositionID,Symbol,Volume,PriceTP,PriceSL FROM mt5_deals WHERE PositionID={$data['orderid']} and Time = (SELECT MAX(Time) FROM mt5_deals WHERE PositionID={$data['orderid']})")[0];
+            $closeResult = Db::query("SELECT Price,Time,Login,PositionID,Symbol,Volume,PriceTP,PriceSL FROM mt5_deals WHERE PositionID={$orderid} and Time = (SELECT MAX(Time) FROM mt5_deals WHERE PositionID={$orderid})");
 
             //获取订单的所有deal,orders
-            $result =  Db::connect("db_con2")->query("select Deal as 'deal',`Order` from mt5_deals  WHERE PositionID = {$data['orderid']}");
+            $result =  Db::query("select Deal as 'deal',`Order` from mt5_deals  WHERE PositionID = {$orderid}");
 
             $getDeals = array_column($result,'deal');
             $order = array_column($result,'Order');
 
             if($closeResult && $result && $openResult){
-
+                $openResult = $openResult[0];
+                $earnings = $earnings[0];
+                $closeResult = $closeResult[0];
                 //发送set_current_postion 数据
                 $send = ['orders'=>$order,'from'=>strtotime($openResult['Time'])-1,'to'=>strtotime($closeResult['Time'])+1,'login'=>$closeResult['Login'],'deals'=>$getDeals];
 
@@ -277,7 +292,7 @@ class Index extends controller
 
             $where['Login'] = ['in',implode(',',$data)];
 
-            $result =  Db::connect("db_con2")->name('mt5_users')->where($where)->field(['Balance','Login'])->select();
+            $result =  Db::name('mt5_users')->where($where)->field(['Balance','Login'])->select();
     $result = array_column($result,'Balance','Login');
 
             if($result){
@@ -291,12 +306,5 @@ class Index extends controller
         }
     }
 
-    //程序执行时间秒速
-    public function curenttime()
-    {
-        $t = microtime(true);
-        $micro = sprintf("%06d",($t - floor($t)) * 1000000);
-        $d = new \DateTime( date('Y-m-d H:i:s.'.$micro, $t) );
-        print $d->format("Y-m-d H:i:s.u"); // note at point on "u"
-    }
+
 }

+ 26 - 4
thinkphp/application/index/controller/Test.php

@@ -16,10 +16,30 @@ class Test extends Controller
     public function index()
     {
 
-            $params = ['request'=>'login','login'=>666666,'password'=>'kobe19879151'];
-            $data = $this->http('http://127.0.0.1:9000',$params);
-            $data = json_decode($data,true);
-            var_dump($data['token']);
+           // $params = ['request'=>'login','login'=>666666,'password'=>'kobe19879151'];
+
+           $params = [
+               "a[BatchRegister]"=>"BatchRegister",
+               "user"=>[
+                   "name"=>"candys",
+                   "email"=>"a@b",
+                   "group"=>"demo\\2k001",
+                   "leverage" =>"50",
+                   "password" => "Ra123456",
+                   "confirm_password"=>"Ra123456",
+                   "invest_password"=>"Ra12345678",
+                   "city"=>"china",
+                   "zipcode"=>"a",
+                   "state"=>"a",
+                   "country" =>"Afganistan",
+                   "address" =>"china",
+                   "phone"=>"18477272535",
+                   "phone_password"=>"18477272535"
+               ]
+           ];
+        $data = $this->http('http://192.168.5.199:988/',$params,"POST");
+        var_dump($data);
+
 
     }
     public function http($url, $params, $method = 'GET', $header = array(), $timeout = 5)
@@ -62,9 +82,11 @@ class Test extends Controller
 
         /* 初始化并执行curl请求 */
         $ch = curl_init();
+
         curl_setopt_array($ch, $opts);
         $data = curl_exec($ch);
         $error = curl_error($ch);
+
         return $data;
     }
 }

+ 14 - 0
thinkphp/vendor/workerman.log

@@ -42,3 +42,17 @@ Stack trace:
 #5 D:\view1\thinkphp\TCPserver\test.php(57): Workerman\Worker::runAll()
 #6 {main}
 2019-05-30 18:47:51 pid:1 Worker process terminated
+2019-08-27 15:32:13 pid:1 ArgumentCountError: Too few arguments to function {closure}(), 1 passed and exactly 2 expected in D:\kshmt5\thinkphp\TCPserver\test.php:37
+Stack trace:
+#0 [internal function]: {closure}(Object(Workerman\Connection\AsyncTcpConnection))
+#1 D:\kshmt5\thinkphp\vendor\workerman\Connection\TcpConnection.php(924): call_user_func(Object(Closure), Object(Workerman\Connection\AsyncTcpConnection))
+#2 D:\kshmt5\thinkphp\vendor\workerman\Connection\AsyncTcpConnection.php(362): Workerman\Connection\TcpConnection->destroy()
+#3 [internal function]: Workerman\Connection\AsyncTcpConnection->checkConnection(Resource id #30)
+#4 D:\kshmt5\thinkphp\vendor\workerman\Events\Select.php(309): call_user_func_array(Array, Array)
+#5 D:\kshmt5\thinkphp\vendor\workerman\Worker.php(2235): Workerman\Events\Select->loop()
+#6 D:\kshmt5\thinkphp\vendor\workerman\Worker.php(1225): Workerman\Worker->run()
+#7 D:\kshmt5\thinkphp\vendor\workerman\Worker.php(1168): Workerman\Worker::forkWorkersForWindows()
+#8 D:\kshmt5\thinkphp\vendor\workerman\Worker.php(478): Workerman\Worker::forkWorkers()
+#9 D:\kshmt5\thinkphp\TCPserver\test.php(85): Workerman\Worker::runAll()
+#10 {main}
+2019-08-27 15:32:13 pid:1 Worker process terminated

+ 1 - 1
vue-admin-master/config/index.js

@@ -29,7 +29,7 @@ module.exports = {
     assetsPublicPath: '/',
     proxyTable: {
       '/api': {
-        target:'http://www.yytp.com/', //接口地址
+        target:'http://www.yytest.com/', //接口地址
         // secure: false, // 如果是https接口,需要配置这个参数          
         changeOrigin:true, //是否允许跨域
         pathRewrite:{

+ 18 - 2
vue-admin-master/src/api/index.js

@@ -1,6 +1,10 @@
 import axios from 'axios';
 import {Message,Loading,MessageBox} from "element-ui";
 import router from "../routes";
+
+//axios.defaults.timeout = 5000;
+
+
 let http = axios.create({
   //baseURL: 'http://www.yytp.com/',
   //withCredentials: true,
@@ -28,12 +32,15 @@ http.interceptors.request.use(
       return config;
     },
     error => {
+     
       return Promise.reject(error);
     }
 );
 
+
 http.interceptors.response.use(response => {
   let data = response.data;
+ 
   if(data.code == "103"){
     var loginParams = { is_reg: 0 };                                        //登录状态为未登录
       http.post('/api/index/base/logout',loginParams).then((response) => {
@@ -52,13 +59,22 @@ http.interceptors.response.use(response => {
     return response;
   }
   
-});
+}/*,error => {
+  if(error.message.includes('timeout')){   // 判断请求异常信息中是否含有超时timeout字符串
+    console.log("错误回调", error);     
+    Message.error({message:'网络超时,请重新操作'});
+    return Promise.reject(error);          // reject这个错误信息
+  }
+  return Promise.reject(error);
+}*/
+);
 function apiAxios(method, url, params, response) {
     http({
       method: method,
       url: url,
       data: method === 'POST' || method === 'PUT' ? params : null,
       params: method === 'GET' || method === 'DELETE' ? params : null,
+    
     }).then(function (res) {
       response(res);
     }).catch(function (err) {
@@ -70,7 +86,7 @@ export default {
   get: function (url, params, response) {
     return apiAxios('GET', url, params, response)
   },
-  post: function (url, params, response) {
+  post: function (url, params, response,) {
     return apiAxios('POST', url, params, response)
   },
   put: function (url, params, response) {

+ 19 - 7
vue-admin-master/src/views/nav1/Table.vue

@@ -373,6 +373,7 @@
 				    };
 				    //向后端请求order信息
 				    this.$api.post('/api/index/index/getorder',para,response => {
+						
 							if (response.status == 200 && response.status < 300) {
 								let { msg, code ,data} = response.data;
 								if(code=="00"){
@@ -558,7 +559,10 @@
 											_this.$message.error("含有做过的单");
 											return false;
 										}else{
-											if(element.BALANCE<_this.filters.tolerance){
+											var min = this.filters.tolerance;
+											if(_this.filters.step < _this.filters.tolerance)
+												min = this.filters.step;
+											if(element.BALANCE<min){
 												
 												_this.sels.splice(index,1);        //删除手数为0的元素
 												index = index-1;                   //因为数组会改变,所以长度也会变化
@@ -1038,12 +1042,15 @@
             // socket连接函数
 			connect: function () {
 				    var _that_ = this;
-					//this.socket = new WebSocket('ws://47.106.182.13:12380');
-					this.socket = new WebSocket('ws://154.218.25.112:12381');
-					//this.socket = new WebSocket('ws://127.0.0.1:12381');
+					this.socket = new WebSocket('ws://47.106.182.13:12382');
+					//this.socket = new WebSocket('ws://154.218.25.112:12381');
+					//this.socket = new WebSocket('ws://120.25.77.133:12382');
+					//this.socket = new WebSocket('ws://127.0.0.1:12382');
 					//连接成功后的回调函数
                     this.socket.onopen = function () {
-                        clearInterval(this.reConnect);
+						clearInterval(this.reConnect);
+						//this.reConnect = null;
+						//console.log('已连接');
                         _that_.heartbeatStart();
 					};
 
@@ -1228,7 +1235,8 @@
 
                     //用于指定连接关闭后的回调函数 
                     this.socket.onclose = function () {
-                        clearInterval(_that_.heartbeat);   //清除 心跳检测函数  
+						clearInterval(_that_.heartbeat);   //清除 心跳检测函数  
+						//_that_.heartbeat = null;
 						console.log("closed");              
                         _that_.reConnectStart();           //重新连接
 					};	
@@ -1239,6 +1247,7 @@
 			reConnectStart: function () {
 				var _that_ = this;
 				clearInterval(this.reConnect);
+				//this.reConnect = null;
 				_that_.reConnect = setInterval(function () {
 					console.log("reConnect");
 					_that_.connect();
@@ -1249,9 +1258,12 @@
 			heartbeatStart: function () {
 				var _that_ = this;
 				this.heartbeat = setInterval(function () {
-                    _that_.socket.send(JSON.stringify({
+					if(_that_.socket.readyState === 1){
+							 _that_.socket.send(JSON.stringify({
                         type: "heartbeat"
 					}));
+					}
+                   console.log('heartbeat');
                 }, 30000);
 			},