SignUpForm.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <?php
  2. namespace merchant\forms;
  3. use Yii;
  4. use yii\base\Model;
  5. use yii\db\ActiveQuery;
  6. use yii\web\NotFoundHttpException;
  7. use common\enums\StatusEnum;
  8. use common\models\member\Member;
  9. use common\enums\AuditStatusEnum;
  10. use common\enums\MemberTypeEnum;
  11. use common\enums\AppEnum;
  12. use common\enums\OperatingTypeEnum;
  13. use addons\Merchants\common\enums\SmsUsageEnum;
  14. use addons\Merchants\common\models\Merchant;
  15. use addons\Merchants\common\models\SettingForm;
  16. /**
  17. * Class SignUpForm
  18. * @package merchant\forms
  19. * @author jianyan74 <751393839@qq.com>
  20. */
  21. class SignUpForm extends Model
  22. {
  23. public $id;
  24. public $title;
  25. public $username;
  26. public $cate_id;
  27. public $mobile;
  28. public $auth_role_id;
  29. public $password;
  30. public $re_pass;
  31. public $rememberMe;
  32. protected $member;
  33. protected $merchant;
  34. public $code;
  35. /**
  36. * @return array
  37. */
  38. public function rules()
  39. {
  40. return [
  41. [['cate_id'], 'integer'],
  42. [['rememberMe'], 'isRequired'],
  43. [['title', 'auth_role_id', 'cate_id', 'username', 'mobile', 'password', 'code', 're_pass'], 'required'],
  44. ['mobile', 'string', 'max' => 15],
  45. [
  46. ['title'],
  47. 'unique',
  48. 'targetClass' => Merchant::class,
  49. 'message' => '{attribute}已经被占用.',
  50. 'filter' => function (ActiveQuery $query) {
  51. return $query->andWhere(['>=', 'status', StatusEnum::DISABLED]);
  52. },
  53. ],
  54. [
  55. 'mobile',
  56. 'unique',
  57. 'targetClass' => Member::class,
  58. 'filter' => function (ActiveQuery $query) {
  59. return $query
  60. ->andWhere(['>=', 'status', StatusEnum::DISABLED])
  61. ->andWhere(['type' => MemberTypeEnum::MERCHANT]);
  62. },
  63. 'message' => '该手机号码已经被占用.'
  64. ],
  65. ['mobile', 'match', 'pattern' => '/^1[3456789]\d{9}$/', 'message' => '手机号码格式不正确'],
  66. [
  67. ['username'],
  68. 'unique',
  69. 'targetClass' => Member::class,
  70. 'filter' => function (ActiveQuery $query) {
  71. return $query
  72. ->andWhere(['>=', 'status', StatusEnum::DISABLED])
  73. ->andWhere(['type' => MemberTypeEnum::MERCHANT]);
  74. },
  75. 'message' => '该用户名已经被占用了.'
  76. ],
  77. [
  78. 'username',
  79. 'match',
  80. 'pattern' => '/^[(\x{4E00}-\x{9FA5})a-zA-Z]+[(\x{4E00}-\x{9FA5})a-zA-Z_\d]*$/u',
  81. 'message' => '用户名由字母,汉字,数字,下划线组成,且不能以数字和下划线开头。',
  82. ],
  83. ['username', 'string', 'min' => 6, 'max' => 20],
  84. [['password', 're_pass'], 'string', 'min' => 6, 'max' => 20],
  85. ['re_pass', 'compare', 'compareAttribute' => 'password', 'message' => '两次输入的密码不一致'],
  86. ['code', '\common\models\validators\SmsCodeValidator', 'usage' => SmsUsageEnum::REGISTER],
  87. ];
  88. }
  89. /**
  90. * @return array
  91. */
  92. public function attributeLabels()
  93. {
  94. return [
  95. 'title' => '商家名称',
  96. 'cate_id' => '主营行业',
  97. 'auth_role_id' => '开店套餐',
  98. 'code' => '验证码',
  99. 'username' => '商家账户',
  100. 'mobile' => '手机号码',
  101. 'password' => '账户密码',
  102. 're_pass' => '确认密码',
  103. 'rememberMe' => '',
  104. ];
  105. }
  106. /**
  107. * @param $attribute
  108. */
  109. public function isRequired($attribute)
  110. {
  111. if (empty($this->rememberMe)) {
  112. $this->addError($attribute, '请同意商家入驻协议');
  113. }
  114. }
  115. /**
  116. * @return bool|Merchant
  117. */
  118. public function register()
  119. {
  120. /** @var SettingForm $setting */
  121. $setting = Yii::$app->merchantsService->config->setting();
  122. // 事务
  123. $transaction = Yii::$app->db->beginTransaction();
  124. try {
  125. $merchant = new Merchant();
  126. $merchant = $merchant->loadDefaultValues();
  127. $merchant->title = $this->title;
  128. $merchant->cate_id = $this->cate_id;
  129. $merchant->mobile = $this->mobile;
  130. $merchant->status = StatusEnum::ENABLED;
  131. $merchant->audit_status = AuditStatusEnum::DISABLED;
  132. $merchant->auth_role_id = $this->auth_role_id;
  133. $merchant->end_time = time() + 3600 * 24 * $setting->register_experience_day;
  134. $merchant->operating_type = OperatingTypeEnum::ENTER;
  135. // 自动通过审核
  136. if ($setting->register_auto_pass == StatusEnum::ENABLED) {
  137. $merchant->audit_status = AuditStatusEnum::ENABLED;
  138. }
  139. if (!$merchant->save()) {
  140. $this->addErrors($merchant->getErrors());
  141. throw new NotFoundHttpException('商户信息编辑错误');
  142. }
  143. $member = new Member();
  144. $member->merchant_id = $merchant->id;
  145. $member->username = $this->username;
  146. $member->mobile = $this->mobile;
  147. $member->type = MemberTypeEnum::MERCHANT;
  148. $member->password_hash = Yii::$app->security->generatePasswordHash($this->password);
  149. if (!$member->save()) {
  150. $this->addErrors($member->getErrors());
  151. throw new NotFoundHttpException('用户信息编辑错误');
  152. }
  153. // 角色授权
  154. Yii::$app->services->rbacAuthAssignment->assign([$this->auth_role_id], $member->id, AppEnum::MERCHANT);
  155. $transaction->commit();
  156. return $merchant;
  157. } catch (\Exception $e) {
  158. $transaction->rollBack();
  159. return false;
  160. }
  161. }
  162. }
粤ICP备19079148号