| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- <?php
- /**
- * UserForm.php
- * 手机端收银台--会员用户管理模型
- * Created on 2024/11/29 下午2:16
- * @author: hankaige
- */
- namespace app\modules\client\models\v1\cashier;
- use app\models\CashierActionLog;
- use app\models\Level;
- use app\models\Order;
- use app\models\SaasUser;
- use app\models\User;
- use yii\base\Model;
- class UserForm extends Model
- {
- public int $store_id;
- public $md_id;
- public $keyword;
- public $id;
- public $nickname;
- public $binding;
- public $user_remark;
- public $level;
- // 验证场景
- const USER_SEARCH = 'user_search';
- const USER_LIST = 'user_list';
- const USER_ADD = 'user_add';
- const USER_EDIT = 'user_edit';
- const USER_DELETE = 'user_delete';
- public function rules(): array
- {
- return [
- [['store_id'], 'required', 'on' => [self::USER_SEARCH, self::USER_LIST]],
- [['keyword'], 'string', 'on' => [self::USER_LIST]],
- [['keyword'], 'required', 'on' => [self::USER_SEARCH]],
- [['id'], 'required', 'on' => [self::USER_EDIT]],
- [['id', 'level'], 'integer', 'on' => [self::USER_ADD, self::USER_EDIT]],
- [['nickname', 'binding'], 'required', 'on' => [self::USER_ADD, self::USER_EDIT]],
- [['nickname', 'binding', 'user_remark'], 'string', 'on' => [self::USER_ADD, self::USER_EDIT]],
- [['md_id'], 'safe']
- ];
- }
- public function attributeLabels(): array
- {
- return [
- 'store_id' => '商城ID',
- 'keyword' => '搜索内容',
- 'id' => '用户ID',
- 'nickname' => '用户昵称',
- 'binding' => '用户手机号',
- 'level' => '会员等级',
- 'user_remark' => '用户备注'
- ];
- }
- public function searchUser(): array
- {
- if (!$this->validate()) {
- return ['code' => 1, 'msg' => $this->getErrorSummary(FALSE)[0]];
- }
- $query = User::find()->alias('u')->leftjoin(['l' => Level::tableName()], 'u.level=l.level')->where(['u.store_id' => $this->store_id, 'u.is_delete' => 0]);
- // 更具用户昵称 手机号 搜索用户
- $query->andWhere(['or', ['like', 'u.nickname', $this->keyword], ['=', 'u.binding', $this->keyword]])->select(['u.id', 'u.avatar_url', 'u.nickname', 'u.binding', 'level_name' => 'l.name']);
- $result['list'] = $query->orderBy('u.created_at DESC')->asArray()->all();
- foreach ($result['list'] as &$item) {
- $item['level_name'] = empty($item['level_name']) ? '普通会员' : $item['level_name'];
- }
- // 获取搜索结果集
- return ['code' => 0, 'msg' => '搜索成功', 'data' => $result];
- }
- public function getUserList(): array
- {
- if (!$this->validate()) {
- return ['code' => 1, 'msg' => $this->getErrorSummary(FALSE)[0]];
- }
- $query = User::find()->alias('u')->where(['u.store_id' => $this->store_id, 'u.is_delete' => 0]);
- $query->select(['u.id', 'u.nickname', 'u.avatar_url', 'u.binding', 'u.integral', 'u.money', 'u.user_remark', 'u.created_at', 'u.level']);
- if (!empty($this->keyword)) {
- $query->andWhere(['or', ['like', 'u.nickname', $this->keyword], ['u.binding' => $this->keyword]]);
- }
- $result = pagination_make($query, TRUE, 'u.created_at DESC');
- foreach ($result['list'] as &$item) {
- $item['level_name'] = Level::find()->where(['level' => $item['level'], 'is_delete' => 0, 'store_id' => $this->store_id])->one()['name'] ?? '普通会员';
- $item['user_remark'] = empty($item['user_remark']) ? '' : $item['user_remark'];
- $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']);
- // 计算用户订单数量和订单支付金额
- $orderQuery = Order::find()->where(['user_id' => $item['id'], 'trade_status' => [Order::ORDER_FLOW_NO_SEND, Order::ORDER_FLOW_SEND, Order::ORDER_FLOW_CONFIRM]]);
- $item['order_count'] = $orderQuery->count();
- $item['order_price'] = $orderQuery->select('SUM(total_price)')->scalar();
- if (!empty($item['binding'])) {
- $saasUser = SaasUser::findOne(['mobile' => $item['binding']]);
- if ($saasUser) {
- $item['nickname'] = $saasUser->name;
- $item['avatar_url'] = $saasUser->avatar;
- }
- }
- }
- return ['code' => 0, 'data' => $result];
- }
- public function editUser(): array
- {
- try {
- if (!$this->validate()) {
- return ['code' => 1, 'msg' => $this->getErrorSummary(FALSE)[0]];
- }
- $user = User::findOne(['id' => $this->id, 'is_delete' => User::USER_NOT_DELETE]);
- if (empty($user)) {
- return ['code' => 1, 'msg' => '用户不存在'];
- }
- // 商城用户手机号与当前手机号不一样的话要把所有的手机号都改一下
- if ($user->binding != $this->binding) {
- $t = \Yii::$app->db->beginTransaction();
- try {
- $usingBinding = User::findOne(['binding' => $this->binding, 'is_delete' => User::USER_NOT_DELETE]);
- if ($usingBinding) {
- throw new \Exception('该手机号已被使用');
- }
- $allUser = User::find()->where(['binding' => $user->binding, 'is_delete' => User::USER_NOT_DELETE])->all();
- foreach ($allUser as $userItem) {
- $userItem->binding = $this->binding;
- $userItem->save();
- }
- $saasUser = SaasUser::findOne(['mobile' => $user->binding, 'is_delete' => SaasUser::DELETE_STATUS_FALSE]);
- if ($saasUser) {
- $saasUser->mobile = $this->binding;
- $saasUser->save();
- }
- $t->commit();
- } catch (\Exception $e) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => $e->getMessage(),
- ];
- }
- }
- $user->nickname = $this->nickname;
- $user->binding = $this->binding;
- $user->level = $this->level;
- $user->user_remark = $this->user_remark;
- if ($user->save()) {
- // 生成操作记录
- CashierActionLog::setLog($this->store_id, get_user_id(), CashierActionLog::EDIT_USER, '编辑' . $user->nickname . '用户资料', $this->md_id);
- return ['code' => 0, 'msg' => '保存成功'];
- } else {
- return ['code' => 1, 'msg' => '保存失败'];
- }
- } catch (\Exception $e) {
- return ['code' => 1, 'msg' => $e->getMessage()];
- }
- }
- public function addUser(): array
- {
- try {
- if (!$this->validate()) {
- return ['code' => 1, 'msg' => $this->getErrorSummary(FALSE)[0]];
- }
- $t = \Yii::$app->db->beginTransaction();
- $user = User::findOne(['binding' => $this->binding, 'is_delete' => User::USER_NOT_DELETE]);
- if ($user) {
- throw new \Exception('该手机号已被其他用户使用过');
- }
- $newUser = new User();
- $newUser->store_id = $this->store_id;
- $newUser->type = User::USER_TYPE_NORMAL;
- $newUser->binding = $this->binding;
- $newUser->username = $this->nickname;
- $newUser->nickname = $this->nickname;
- $newUser->password = \Yii::$app->security->generatePasswordHash(\Yii::$app->security->generateRandomString(), 5);
- $newUser->auth_key = \Yii::$app->security->generateRandomString();
- $newUser->access_token = \Yii::$app->security->generateRandomString();
- $newUser->is_delete = User::USER_NOT_DELETE;
- $newUser->wechat_open_id = '';
- $newUser->wechat_union_id = '';
- $newUser->platform = User::USER_FROM_CASHIER; // 收银台注册
- isset($this->level) && $newUser->level = $this->level;
- $newUser->user_remark = $this->user_remark;
- if (!$newUser->save()) {
- $t->rollBack();
- return ['code' => 1, 'msg' => '添加失败'];
- }
- // 创建saas_user表对应数据
- $saas_user = SaasUser::find()->where(['mobile' => $this->binding, 'is_delete' => SaasUser::DELETE_STATUS_FALSE])->one();
- if (!$saas_user) {
- $saas_user = new SaasUser();
- $saas_user->mobile = $this->binding;
- $saas_user->store_id = $this->store_id;
- $saas_user->name = $this->nickname;
- if (!$saas_user->save()) {
- $t->rollBack();
- throw new \Exception('平台账号创建失败');
- }
- }
- // 生成操作记录
- CashierActionLog::setLog($this->store_id, get_user_id(), CashierActionLog::ADD_USER, '新增' . $newUser->nickname . '用户', $this->md_id);
- $t->commit();
- return ['code' => 0, 'msg' => '用户创建成功'];
- } catch (\Exception $e) {
- return ['code' => 1, 'msg' => $e->getMessage()];
- }
- }
- public function getLevelList()
- {
- $level = Level::find()->where(['store_id' => $this->store_id, 'is_delete' => 0])->orderBy('level asc')->asArray()->select(['id', 'level', 'name'])->all();
- // 在数组第一位添加一个['id'=>-1,'level'=>-1,'name'=>'普通会员']
- array_unshift($level, ['id' => -1, 'level' => -1, 'name' => '普通会员']);
- return ['code' => 0, 'data' => $level ?? []];
- }
- }
|