SettingManagementService.php 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <?php
  2. namespace App\Http\Services\Backend\DataManagement;
  3. use App\Http\Services\ConstDef\GeneralConst;
  4. use App\Models\Web\Settings;
  5. class SettingManagementService
  6. {
  7. private $settingManagementDb;
  8. private $basedir;
  9. public function __construct()
  10. {
  11. date_default_timezone_set("Asia/Taipei");
  12. $this->settingManagementDb = new Settings();
  13. $this->basedir = preg_replace('/\/app\/.*/', '/public/', __DIR__);
  14. }
  15. public function getSettings(
  16. &$cnt = 0,
  17. $orderColumn,
  18. $orderDir,
  19. $start,
  20. $length,
  21. $searchValue,
  22. $name,
  23. $cDateStart,
  24. $cDateFinal,
  25. $active
  26. )
  27. {
  28. // 選欄位
  29. $activeStr = '';
  30. foreach (GeneralConst::$activeMap as $k => $v) {
  31. $activeStr .= ' when \'' . $k . '\' then \'' . $v . '\'';
  32. }
  33. $settings = $this->settingManagementDb
  34. ->select([
  35. 'id',
  36. \DB::raw("CONCAT('<a href=\"settingManagement/edit/', id, '\">', name, '</a>') as name"),
  37. 'k',
  38. 'v',
  39. \DB::raw("(case active $activeStr end) as active"),
  40. 'cdate',
  41. 'mdate',
  42. \DB::raw("(select name from users where id=settings.oid) as oid"),
  43. ]);
  44. // 過濾搜尋條件
  45. $settings = $settings
  46. ->where('name', 'LIKE', '%' . $name . '%');
  47. if ($active != '') $settings = $settings->where('active', '=', $active);
  48. $settings = $settings->where('cdate', '>=', $cDateStart . ' 00:00:00');
  49. $settings = $settings->where('cdate', '<=', $cDateFinal . ' 23:59:59');
  50. // 取總筆數
  51. $cnt = $settings->count();
  52. // 排序
  53. $settings = $settings
  54. ->orderByRaw((int)$orderColumn . ' ' . $orderDir);
  55. // 彙整
  56. // 分頁
  57. $settings = $settings
  58. ->skip($start)->take($length);
  59. // 實際取資料
  60. $settings = $settings
  61. ->get()
  62. ->toArray();
  63. // 整理返回值並返回
  64. return $settings;
  65. }
  66. public function getSettingById($id)
  67. {
  68. // 取得參數
  69. // 調用資料庫(或者其他業務邏輯)
  70. $setting = $this->settingManagementDb->select([
  71. 'id',
  72. 'name',
  73. 'k',
  74. 'v',
  75. 'active',
  76. 'cdate',
  77. 'mdate',
  78. \DB::raw("(select name from users where id=settings.oid) as oid"),
  79. ])
  80. ->where('id', $id)
  81. ->first()
  82. ->toArray();
  83. // 整理返回值並返回
  84. return $setting;
  85. }
  86. public function insertSetting($name, $k, $v, $active, $oid)
  87. {
  88. // 取得參數
  89. // 調用資料庫(或者其他業務邏輯)
  90. $this->settingManagementDb
  91. ->insert([
  92. 'name' => $name,
  93. 'k' => $k,
  94. 'v' => $v,
  95. 'active' => $active,
  96. 'cdate' => date('Y-m-d H:i:s'),
  97. 'mdate' => date('Y-m-d H:i:s'),
  98. 'oid' => $oid,
  99. ]);
  100. $id = \DB::getPdo()->lastInsertId();
  101. // 整理返回值並返回
  102. return $id;
  103. }
  104. public function modifySetting($id, $name, $k, $v, $active, $oid)
  105. {
  106. // 取得參數
  107. // 調用資料庫(或者其他業務邏輯)
  108. $res = $this->settingManagementDb
  109. ->where('id', $id)
  110. ->update([
  111. 'name' => $name,
  112. 'k' => $k,
  113. 'v' => $v,
  114. 'active' => $active,
  115. 'mdate' => date('Y-m-d H:i:s'),
  116. 'oid' => $oid,
  117. ]);
  118. // 整理返回值並返回
  119. return $res;
  120. }
  121. // 外部服務取得設定
  122. public function getSetting()
  123. {
  124. $res = $this->settingManagementDb->select(['k', 'v'])->where('active', GeneralConst::ACTIVE_YES)->get()->toArray();
  125. $setting = [];
  126. foreach ($res as $r) $setting[ $r['k'] ] = $r['v'];
  127. return $setting;
  128. }
  129. // 外部服務取得設定
  130. public function setSetting($k, $v)
  131. {
  132. $this->settingManagementDb
  133. ->where('k', $k)
  134. ->where('active', GeneralConst::ACTIVE_YES)
  135. ->update([
  136. 'v' => $v,
  137. 'mdate' => date('Y-m-d H:i:s'),
  138. 'oid' => 1, // 腳本更改視為管理員更改
  139. ]);
  140. return true;
  141. }
  142. // 外部服務取得設定
  143. public function syncSettingToS3()
  144. {
  145. $res = $this->settingManagementDb
  146. ->select(['k', 'v'])
  147. ->where('active', GeneralConst::ACTIVE_YES)
  148. ->where('k', 'like', 'MASHUP_SETTING_%')
  149. ->get()
  150. ->toArray();
  151. $setting = [];
  152. foreach ($res as $r) $setting[ $r['k'] ] = json_decode($r['v'], true);
  153. // 寫入 S3 (不保存在本地)
  154. $s3 = new \Aws\S3\S3Client([
  155. 'credentials' => [
  156. 'key' => env('AWS_APP_KEY'),
  157. 'secret' => env('AWS_APP_SECRET'),
  158. ],
  159. 'region' => env('AWS_S3_REGION'),
  160. 'version' => 'latest',
  161. ]);
  162. $s3->putObject([
  163. 'ACL' => 'public-read',
  164. 'Body' => json_encode($setting, JSON_UNESCAPED_UNICODE),
  165. 'Bucket' => env('AWS_S3_BUCKET'),
  166. 'ContentType' => 'application/json; charset=utf-8',
  167. 'Key' => env('AWS_S3_NAMESPACE') . '/' . substr(GeneralConst::JSON_BASE_SETTING, 2),
  168. ]);
  169. unset($s3);
  170. return true;
  171. }
  172. }