283 lines
7.3 KiB
PHP
283 lines
7.3 KiB
PHP
<?php
|
|
|
|
//declare(strict_types=1);
|
|
|
|
namespace App\Services\Tg\Hook\Mod;
|
|
|
|
use App\Models\Node as ModelNode;
|
|
use App\Utils\Tools;
|
|
//use App\Services\DB;
|
|
use App\Services\TomTool\Http;
|
|
|
|
class Node extends Base
|
|
{
|
|
|
|
public function Clone($aParam)
|
|
{
|
|
|
|
// list(, $iNodeId) = explode(" ", $sText, 2);
|
|
|
|
$iNodeId = $aParam['aArg'][1];
|
|
|
|
$oHttp = new Http();
|
|
|
|
$oHttp->sMethod = "post";
|
|
$oHttp->sToUrl = $_ENV['baseUrl']."/api/tg/node/".$iNodeId."/copy";
|
|
$oHttp->bIsJson = true;
|
|
$oHttp->aData = [
|
|
'chatId' => $aParam['aOther']['chatId'],
|
|
'fromId' => $aParam['aOther']['fromId']
|
|
];
|
|
|
|
$r = @json_decode($oHttp->send(), true);
|
|
|
|
if ($r["ret"] == 1) {
|
|
$sMessage = "成功";
|
|
} else {
|
|
$sMessage = "失败";
|
|
}
|
|
|
|
return $sMessage;
|
|
|
|
}
|
|
|
|
public function List()
|
|
{
|
|
|
|
$aNodeList = ModelNode::where('type', 1)->orderBy('name', 'asc')->get()->toArray();
|
|
|
|
$sMsg = '';
|
|
foreach ($aNodeList as $row) {
|
|
$sMsg .= "\n\n";
|
|
$sMsg .= $row['name'].', id:'.$row['id'].', duck:'.$row['duck_code'].', zf:'.$row['zhuanfa_code'].', sort:'.$row['sort'];
|
|
}
|
|
|
|
return $sMsg;
|
|
|
|
}
|
|
|
|
public function Find($aParam)
|
|
{
|
|
// $iId = $aParam["aArg"][1] ?? false;
|
|
$aParam["aOption"][1] = $aParam["aOption"][1] ? $aParam["aOption"][1] : "id";
|
|
|
|
return $this->Like($aParam, "find");
|
|
}
|
|
|
|
public function Like($aParam, $sMod2 = false)
|
|
{
|
|
|
|
// @list($sCmd, $sLike) = explode(" ", $sText);
|
|
//
|
|
// @list(, $sField, $sMod) = explode("#", $sCmd, 3);
|
|
|
|
$sLike = $aParam['aArg'][1] ?? false;
|
|
$sField = $aParam['aOption'][1] ?? false;
|
|
@$sMod = $aParam['aOption'][2] ?? false;
|
|
|
|
if ($sLike == "?") {
|
|
return "/node#like__<field> <value>";
|
|
}
|
|
|
|
if (!$sLike) {
|
|
return "需要value";
|
|
}
|
|
|
|
if (!$sField) {
|
|
return "需要field";
|
|
}
|
|
|
|
|
|
switch ($sField) {
|
|
case "port":
|
|
$sField = "custom_config";
|
|
break;
|
|
case "config":
|
|
$sField = "custom_config";
|
|
break;
|
|
case "duck":
|
|
$sField = "duck_code";
|
|
break;
|
|
case "zhuanfa":
|
|
$sField = "zhuanfa_code";
|
|
break;
|
|
default:
|
|
$sField = $sField;
|
|
break;
|
|
}
|
|
|
|
$sMsg = '?';
|
|
|
|
if ($sMod2 == "find") {
|
|
$oNodeList = ModelNode::where($sField, $sLike);
|
|
} else {
|
|
$oNodeList = ModelNode::where($sField, 'like', '%' . $sLike . '%');
|
|
}
|
|
|
|
if ($sMod == 'type1') {
|
|
$oNodeList->where('type', 1);
|
|
}
|
|
|
|
$aNodeList = $oNodeList->orderBy('type', 'desc')->orderBy('name', 'asc')->get()->toArray();
|
|
|
|
if (empty($aNodeList)) {
|
|
|
|
$sMsg = "没有";
|
|
|
|
} else {
|
|
|
|
$aNodeListNew = [];
|
|
foreach ($aNodeList as &$row) {
|
|
|
|
$row['custom_config'] = json_decode($row['custom_config']);
|
|
$row['dynamic_rate_config'] = json_decode($row['dynamic_rate_config']);
|
|
$row['node_bandwidth_limit'] = Tools::flowToGB($row['node_bandwidth_limit']).'GB';
|
|
$row['node_bandwidth'] = Tools::flowToGB($row['node_bandwidth']).'GB';
|
|
$row['node_heartbeat'] = date('Y-m-d H:i:s', $row['node_heartbeat']);
|
|
unset($row['is_dynamic_rate']);
|
|
unset($row['dynamic_rate_type']);
|
|
unset($row['dynamic_rate_config']);
|
|
unset($row['bandwidthlimit_resetday']);
|
|
unset($row['is_dynamic_rate']);
|
|
unset($row['password']);
|
|
|
|
// $sMsg = json_encode($row, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
|
//
|
|
// $this->oTGHttp->sendToTG($sMsg);
|
|
//
|
|
}
|
|
$sMsg = $this->toJson($aNodeList);
|
|
}
|
|
return $sMsg;
|
|
// $this->oHttp::response(200, 'ok');
|
|
}
|
|
|
|
public function FindSet($aParam)
|
|
{
|
|
if ($aParam["aArg"][1] == "?") {
|
|
return "/node#findSet__<field>__<value> <to> | 批量查找替换";
|
|
}
|
|
|
|
$sField = $aParam["aOption"][1] ?? false;
|
|
$sValue = $aParam["aOption"][2] ?? false;
|
|
$sTo = $aParam["aArg"][1] ?? false;
|
|
|
|
if (!$sField) {
|
|
return "需要field";
|
|
}
|
|
|
|
if (!$sValue) {
|
|
return "需要value";
|
|
}
|
|
|
|
if (!$sTo) {
|
|
return "需要to";
|
|
}
|
|
|
|
$oNodeNow = ModelNode::where($sField, $sValue)->get();
|
|
|
|
if ($oNodeNow->isEmpty()) {
|
|
return "没找到对应数据";
|
|
}
|
|
|
|
$i=0;
|
|
foreach ($oNodeNow as $oNodeNowRow) {
|
|
$oNodeNowRow->$sField = $sTo;
|
|
$oNodeNowRow->save();
|
|
$i++;
|
|
}
|
|
|
|
return "处理".$i."条数据";
|
|
}
|
|
|
|
public function Set($aParam)
|
|
{
|
|
|
|
// list($sCmd, $sSet) = explode(" ", $sText, 2);
|
|
//
|
|
// list(, $sField, $iNodeId) = explode("#", $sCmd, 3);
|
|
|
|
$sSet = $aParam['aArg'][1];
|
|
$iNodeId = $aParam['aOption'][1];
|
|
$sField = $aParam['aOption'][2];
|
|
|
|
switch ($sField) {
|
|
case "config":
|
|
$sField = "custom_config";
|
|
break;
|
|
case "duck":
|
|
$sField = "duck_code";
|
|
break;
|
|
case "zhuanfa":
|
|
$sField = "zhuanfa_code";
|
|
break;
|
|
default:
|
|
$sField = $sField;
|
|
break;
|
|
}
|
|
|
|
$sMsg = '?';
|
|
|
|
$oNode = ModelNode::find($iNodeId);
|
|
|
|
if (!$oNode) {
|
|
$sMsg = "没有这个id";
|
|
} else {
|
|
$oNode->$sField = $sSet;
|
|
$oNode->save();
|
|
|
|
$sMsg = "ok";
|
|
}
|
|
|
|
|
|
$aParam["aOption"][1] = "id";
|
|
$aParam["aOption"][2] = NULL;
|
|
$aParam["aArg"][1] = $oNode->id;
|
|
return $this->Find($aParam);
|
|
|
|
}
|
|
|
|
public function Del($aParam)
|
|
{
|
|
|
|
// list($sCmd, $iId) = explode(" ", $sText, 2);
|
|
$iId = $aParam['aArg'][1];
|
|
|
|
$sMsg = '?';
|
|
|
|
$oNode = ModelNode::where("id", $iId)->first();
|
|
|
|
if ($oNode) {
|
|
// 尝试删除记录
|
|
$deleted = $oNode->delete();
|
|
|
|
if ($deleted) {
|
|
// 删除成功
|
|
$sMsg = "成功";
|
|
} else {
|
|
// 删除失败
|
|
$sMsg = "失败";
|
|
}
|
|
} else {
|
|
// 找不到记录
|
|
$sMsg = "找不到记录";
|
|
}
|
|
|
|
return $sMsg;
|
|
|
|
}
|
|
|
|
public function SetRateAll($aParam)
|
|
{
|
|
|
|
$iRate = $aParam['aArg'][1];
|
|
|
|
$r = ModelNode::query()->update(['traffic_rate' => $iRate]);
|
|
|
|
return $r;
|
|
|
|
}
|
|
|
|
|
|
}
|