NodeService.php 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace App\Services;
  3. use App\Components\IP;
  4. use App\Models\Node;
  5. use App\Models\NodeLabel;
  6. class NodeService
  7. {
  8. public function getNodeGeo($id = false): int
  9. {
  10. if ($id) {
  11. $nodes = Node::whereStatus(1)->whereId($id)->get();
  12. } else {
  13. $nodes = Node::whereStatus(1)->get();
  14. }
  15. $result = 0;
  16. foreach ($nodes as $node) {
  17. $data = IP::IPSB(
  18. $node->is_ddns ? gethostbyname($node->server) : $node->ip
  19. );
  20. if ($data) {
  21. if (Node::whereId($node->id)->update(
  22. ['geo' => $data['latitude'] . ',' . $data['longitude']]
  23. )) {
  24. $result++;
  25. }
  26. }
  27. }
  28. return $result;
  29. }
  30. // 生成节点标签
  31. public function makeLabels($nodeId, $labels): void
  32. {
  33. // 先删除所有该节点的标签
  34. NodeLabel::whereNodeId($nodeId)->delete();
  35. if ( ! empty($labels) && is_array($labels)) {
  36. foreach ($labels as $label) {
  37. $nodeLabel = new NodeLabel();
  38. $nodeLabel->node_id = $nodeId;
  39. $nodeLabel->label_id = $label;
  40. $nodeLabel->save();
  41. }
  42. }
  43. }
  44. }