[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 ?? []]; } }