CurrencyController.php 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace backendApi\modules\v1\controllers;
  3. use backendApi\modules\v1\models\AdminCountry;
  4. use backendApi\modules\v1\models\AdminRole;
  5. use common\helpers\Cache;
  6. use common\helpers\Form;
  7. use common\models\Currency;
  8. use common\models\CurrencyConversions;
  9. use common\models\forms\CurrenciesConversionsForm;
  10. use Yii;
  11. use yii\db\Exception;
  12. use yii\web\HttpException;
  13. class CurrencyController extends BaseController
  14. {
  15. public $modelClass = Currency::class;
  16. public $currencyConversionsModelClass = CurrencyConversions::class;
  17. public function actionCurrencies()
  18. {
  19. $data = $this->modelClass::getFromCache();
  20. return static::notice(['data' => $data]);
  21. }
  22. public function actionCurrenciesConversions()
  23. {
  24. // 国家
  25. $countries = Cache::getCountries();
  26. // 货币
  27. $currencies = $this->modelClass::getFromCache();
  28. // 汇率配置
  29. $currencyConversion = $this->currencyConversionsModelClass::getFromCache();
  30. $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
  31. if (!$isSuper) {
  32. $adminId = Yii::$app->getUser()->getUserInfo()['id'];
  33. $adminCountry = AdminCountry::getCountry($adminId);
  34. $countries = array_filter($countries, fn($country) => in_array($country['ID'], $adminCountry));
  35. $countries = array_values($countries);
  36. $countriesId = array_column($countries, 'ID');
  37. $currencies = array_filter($currencies, fn($currency) => in_array($currency['ID'], $countriesId));
  38. $currencies = array_values($currencies);
  39. $currenciesId = array_column($currencies, 'ID');
  40. $currencyConversion = array_filter($currencyConversion, fn($conversion) => in_array($conversion['TO_CURRENCY_ID'], $currenciesId));
  41. $currencyConversion = array_values($currencyConversion);
  42. }
  43. $currencyConversion = array_column($currencyConversion, NULL, 'TO_CURRENCY_ID');
  44. foreach ($currencies as &$currency) {
  45. $currency['PRODUCT_RATE'] = $currencyConversion[$currency['ID']]['PRODUCT_RATE'] ?? 0;
  46. $currency['BONUSES_RATE'] = $currencyConversion[$currency['ID']]['BONUSES_RATE'] ?? 0;
  47. }
  48. return static::notice(['data' => $currencies]);
  49. }
  50. /**
  51. * @throws Exception
  52. * @throws HttpException
  53. */
  54. public function actionSetCurrenciesConversions()
  55. {
  56. if (\Yii::$app->request->isPost) {
  57. $formModel = new CurrenciesConversionsForm();
  58. $formModel->scenario = 'setCurrenciesConversions';
  59. if ($formModel->load(\Yii::$app->request->post(), '') && $formModel->setCurrenciesConversions()) {
  60. // 更新缓存
  61. $this->currencyConversionsModelClass::updateToCache();
  62. return static::notice(\Yii::t('ctx', 'successfully'));
  63. } else {
  64. return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
  65. }
  66. }
  67. return static::notice(\Yii::t('ctx', 'illegalRequest'));
  68. }
  69. }