SettingService.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. namespace addons\ValetOrder\common\service;
  3. use addons\ValetOrder\common\enums\ValetOrderEnum;
  4. use addons\ValetOrder\common\models\ValetOrderDefaultUser;
  5. use common\models\user\User;
  6. use Yii;
  7. use yii\db\Exception;
  8. class SettingService
  9. {
  10. /**
  11. * 获取配置信息
  12. * @param int $mall_id
  13. * @return array
  14. */
  15. public function get(int $mall_id) :array
  16. {
  17. return Yii::$app->services->setting->addons->get($mall_id, ValetOrderEnum::ADDONS_NAME, 'basic') ?? [];
  18. }
  19. /**
  20. * 设置配置信息
  21. * @param int $mall_id
  22. * @param array $data
  23. * @return bool
  24. */
  25. public function save(int $mall_id, array $data) :bool
  26. {
  27. return Yii::$app->services->setting->addons->set($mall_id, ValetOrderEnum::ADDONS_NAME, ['basic' => $data]);
  28. }
  29. /**
  30. * 给代客下单创建一个默认用户,用于下单预览页展示
  31. *
  32. * @param int $mallId
  33. *
  34. * @return int
  35. * @throws Exception
  36. */
  37. public function createValetOrderDefaultUser(int $mallId): int
  38. {
  39. // 此商城创建过了则不在创建
  40. if ($userId = $this->getValetOrderDefaultUser($mallId)) {
  41. return $userId;
  42. }
  43. $t = Yii::$app->db->beginTransaction();
  44. try {
  45. // 实施注册
  46. $user = User::setData([
  47. 'parent_id' => 0,
  48. 'nickname' => '代客下单预览用户',
  49. 'mall_id' => $mallId,
  50. 'username' => "代客下单预览用户",
  51. 'source' => User::SOURCE_VALET_ORDER_DEFAULT_USER,
  52. 'platform' => User::PLATFORM_H5,
  53. 'password' => ''
  54. ]);
  55. if ($user === false || empty($user->id)) {
  56. Yii::error('注册代客下单预览用户数据失败,errmsg:' . User::getStaticError());
  57. throw new Exception('保存配置失败');
  58. }
  59. // 开启时,检查是否创建了默认用户
  60. $valetOrderDefaultUserModel = ValetOrderDefaultUser::setData(['mall_id' => $mallId, 'user_id' => $user->id]);
  61. if ($valetOrderDefaultUserModel === false || empty($valetOrderDefaultUserModel->id)) {
  62. Yii::error('保存代客下单预览用户数据失败,errmsg:' . ValetOrderDefaultUser::getStaticError());
  63. throw new Exception('保存配置失败');
  64. }
  65. $t->commit();
  66. return $user->id;
  67. }catch (\Exception $e) {
  68. $t->rollBack();
  69. throw $e;
  70. }
  71. }
  72. /**
  73. * 获取默认下单的用户
  74. *
  75. * @param int $mallId
  76. *
  77. * @return int
  78. */
  79. public function getValetOrderDefaultUser(int $mallId): int
  80. {
  81. return ValetOrderDefaultUser::find()->where(['mall_id' => $mallId])->select('user_id')->scalar() ?: 0;
  82. }
  83. /**
  84. * 返回当前用户等级是否显示代客下单按钮
  85. *
  86. * @return void
  87. */
  88. public function getIsShowValetOrderBtn($mallId, $level, $config = []): bool
  89. {
  90. if (!$config) {
  91. $config = $this->get($mallId);
  92. }
  93. // 当前等级是否允许代客下单
  94. $is_show_valet_order_btn = true;
  95. // 如果配置了 不允许所有等级代客下单,并且不在允许代客下单的等级数组内
  96. if (isset($config['allow_all_level_valet_order']) && !$config['allow_all_level_valet_order']) {
  97. $allow_valet_order_user_levels = $config['allow_valet_order_user_levels'] ?? '';
  98. if (!$allow_valet_order_user_levels || !in_array($level, explode(',', $allow_valet_order_user_levels))) {
  99. $is_show_valet_order_btn = false;
  100. }
  101. }
  102. return $is_show_valet_order_btn;
  103. }
  104. }