U8ThirtyPartyDatabaseServerService.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace App\Service;
  3. use Illuminate\Support\Facades\Config;
  4. use Illuminate\Support\Facades\DB;
  5. use Illuminate\Support\Facades\Log;
  6. class U8ThirtyPartyDatabaseServerService extends Service
  7. {
  8. protected $connectionName = '';
  9. public function __construct($data)
  10. {
  11. $this->createConnection($data);
  12. }
  13. private function createConnection($data)
  14. {
  15. $mainConnName = $data['connect_name'];
  16. $this->connectionName = $mainConnName;
  17. // 创建连接
  18. $mainConfig = [
  19. 'driver' => 'sqlsrv',
  20. 'host' => $data['api_host'],
  21. 'port' => $data['database_port'],
  22. 'database' => 'UFDATA_001_2025',
  23. 'username' => $data['username'],
  24. 'password' => $data['password'],
  25. 'options' => [
  26. \PDO::SQLSRV_ATTR_QUERY_TIMEOUT => 15, // 减少超时
  27. \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
  28. ],
  29. ];
  30. // 配置注入
  31. Config::set("database.connections.{$mainConnName}", $mainConfig);
  32. }
  33. public function getStockCountByCategory()
  34. {
  35. try {
  36. $result = DB::connection($this->connectionName)
  37. ->table('Inventory as i')
  38. ->lock('WITH(NOLOCK)')
  39. ->join('InventoryClass as ic', 'i.cInvCCode', '=', 'ic.cInvCCode')
  40. ->join('CurrentStock as s', 'i.cInvCode', '=', 's.cInvCode')
  41. ->select([
  42. 'ic.cInvCCode as category_code',
  43. 'ic.cInvCName as category_name',
  44. DB::raw('SUM(s.iQuantity) as total_quantity')
  45. ])
  46. ->groupBy('ic.cInvCCode', 'ic.cInvCName')
  47. ->orderBy('ic.cInvCCode', 'ASC')
  48. ->get()
  49. ->map(function($item) {
  50. return [
  51. 'category_code' => trim($item->category_code),
  52. 'category_name' => trim($item->category_name),
  53. 'total_quantity' => (float)$item->total_quantity,
  54. ];
  55. })
  56. ->toArray();
  57. return [true, $result];
  58. } catch (\Throwable $e) {
  59. return [false, $e->getMessage()];
  60. }
  61. }
  62. }