64], [['auth_url', 'sign_data'], 'safe'], ]; } /** * {@inheritdoc} */ public function attributeLabels() { return [ 'id' => 'ID', 'user_id' => 'User ID', 'mall_id' => 'Mall ID', 'accountId' => 'work user id', 'name' => '姓名', 'id_card_no' => '身份证', 'mobile' => '手机号码', 'default' => '默认', 'status' => '1未认证2已认证', 'id_card_front' => '身份证正面', 'id_card_back' => '身份证反面', 'auth_url' => '实名认证连接', 'created_at' => 'Created At', 'updated_at' => 'Updated At', 'sign_data' => '签约信息', 'remark' => '签约错误信息', ]; } /** * @return ActiveQueryInterface the relational query object. */ public function getUser() { return $this->hasOne(User::class, ['id' => 'user_id']); } /** * 获取授权用户 * * @param int $mall_id * @param int $user_id * @param int $status * @return static|null */ public static function findAuthUser($mall_id, $user_id, $status = self::STATUS_WAIT) { return self::find()->where(compact('status', 'mall_id', 'user_id'))->one(); } /** * 获取用户 * * @param int $mall_id * @param int $user_id * @param int|null $status * @return static|null */ public static function getAccountUser($mall_id, $user_id, $status = null) { return self::find() ->where(compact('mall_id', 'user_id')) ->andFilterWhere(['status' => $status])->orderBy('id desc')->one(); } /** * 获取授权用户列表 * * @param int $user_id * @param int $status * @return array */ public static function findAuthUserList($user_id, $status = self::STATUS_WAIT): array { return self::find() ->select('mobile,name,id_card_no,user_id') ->where(['user_id' => $user_id, 'status' => $status]) ->indexBy('user_id') ->asArray() ->all(); } /** * 添加用户 * * @param int $mall_id * @param int $user_id * @param string $accountId * @return boolean */ public static function addAuthUser($mall_id, $user_id, string $accountId = ""): bool { $model = self::find()->where(['mall_id' => $mall_id, 'user_id' => $user_id])->one(); if (empty($model)) { $model = new self(); } $model->status = self::STATUS_WAIT; $model->mall_id = $mall_id; $model->user_id = $user_id; $model->accountId = $accountId; $model->created_at = time(); $res = $model->save(); return !$res ? false : $model; } /** * 签约成功 * * @param int $auth_id * @param array $update * @return boolean */ public static function signOk($auth_id, $update = []): bool { $auth = static::find()->select('user_id')->where(['id' => $auth_id])->one(); $update['status'] = self::STATUS_OK; $update['updated_at'] = time(); $update['default'] = (int)static::isSetDefault($auth->user_id); return self::updateAll($update, ['id' => $auth_id]); } /** * 查询是否设置默认 * * @param integer $uid * @return boolean */ public static function isSetDefault(int $uid) { return static::find()->where(['user_id' => $uid, 'default' => 1])->count() > 0 ? false : true; } /** * 签约失败 * * @param int $auth_id * @param array $update * @return boolean */ public static function signFail($auth_id, $update = []): bool { $update['status'] = self::STATUS_WAIT; $update['updated_at'] = time(); return self::updateAll($update, ['id' => $auth_id]); } /** * 当前用户ID是否签约 * * @param integer $mall_id * @param integer $user_id * @return boolean */ public static function uidIsSign(int $mall_id, int $user_id) { return static::find() ->select('id') ->where(['user_id' => $user_id, 'mall_id' => $mall_id, 'status' => self::STATUS_OK]) ->one() ? true : false; } /** * 获取分页数据 * * @param integer $page * @param integer $limit * @param callable $callback * @param string $order_by * @return array */ public static function getPageList( int $page, int $limit, callable $callback, string $order_by = 'id' ) :array { $model = static::find(); if (!empty($callback)) call_user_func($callback, $model); $pagination = new Pagination(['totalCount' => $model->count(), 'pageSize' => $limit]); $model->limit($pagination->limit)->offset($pagination->offset); $list = $model->asArray()->orderBy($order_by)->all(); $data['list'] = $list; $data['page_count'] = $pagination->pageCount; $data['current_page'] = $page + 1; return $data; } /** * 查询用户 * * @param integer $mall_id * @param integer $id * @return static|null */ public static function getUserByIdAndMallId(int $mall_id, int $id) { return static::find() ->where(['mall_id' => $mall_id, 'id' => $id]) ->one(); } /** * 修改账号 * * @param string $mobile * @param string|null $account * @return boolean */ public function changeMobile(string $mobile, $account = '') { $this->mobile = $mobile; $this->account = $account; return $this->save(); } /** * 身份信息获取 * * @param integer $mall_id * @param string $idcard * @param string $name * @return static|null */ public static function getAutnByIdcardAndName(int $mall_id, string $idcard, string $name) { return static::find() ->where(['id_card_no' => $idcard, 'name' => $name, 'mall_id' => $mall_id, 'status' => static::STATUS_OK]) ->one(); } /** * ID查询一条认证记录 * * @param integer $mall_id * @param integer $id * @return static|array|null */ public static function getOkAuthById(int $mall_id, int $id) { return static::find() ->where(['mall_id' => $mall_id, 'id' => $id, 'status' => static::STATUS_OK]) ->one(); } /** * 生成一条新的记录 * * @param integer $user_id * @return boolean */ public function createNewAuth(int $user_id, string $mobile) { $model = new static; $model->user_id = $user_id; $model->accountId = $this->accountId; $model->flowId = $this->flowId; $model->mall_id = $this->mall_id; $model->name = $this->name; $model->id_card_no = $this->id_card_no; $model->mobile = $mobile; $model->status = $this->status; $model->id_card_front = $this->id_card_front; $model->id_card_back = $this->id_card_back; $model->auth_url = $this->auth_url; $model->sign_data = $this->sign_data; $model->default = 0; $model->remark = $this->remark; $model->created_at = $model->updated_at = time(); return $model->save(); } /** * 获取mallID全部已经 * * @param integer $mall_id * @return array|static[] */ public static function getAllAuthUsers(int $mall_id) { return static::find() ->where(['mall_id' => $mall_id, 'status' => static::STATUS_OK]) ->all(); } /** * 获取用户的认证列表 * * @param integer $mall_id * @param integer $user_id * @return void */ public static function getUserAuthList(int $mall_id, int $user_id) { return static::find() ->where(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => static::STATUS_OK]) ->select(['id', 'user_id', 'mall_id', 'name', 'id_card_no as id_card', 'mobile', 'status', 'default']) ->asArray() ->all(); } /** * 获取 * * @param integer $mall_id * @param integer $id * @return static|null */ public static function getAuthById(int $mall_id, int $id) { return static::find() ->where(['mall_id' => $mall_id, 'id' => $id]) ->one(); } /** * @param integer $mall_id * @param integer $user_id * @return boolean */ public static function setNotDefault(int $mall_id, int $user_id) { return static::updateAll( ['default' => 0], ['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => static::STATUS_OK] ); } /** * @return boolean */ public function setDefault() { $this->default = 1; return $this->save(); } /** * 获取默认的签约信息 * * @param integer $mall_id * @param integer $user_id * @return static|null */ public static function getDefaultSignInfo(int $mall_id, int $user_id) { return static::find() ->select(['id', 'user_id', 'mall_id', 'name', 'id_card_no as id_card', 'mobile', 'account', 'status', 'default']) ->where(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => static::STATUS_OK, 'default' => 1]) ->asArray() ->one(); } /** * 通过name mobile idcard获取用户已签约信息 * * @param integer $user_id * @param string $name * @param string $mobile * @param string $idcard * @return static|null */ public static function getSignByNMI(int $user_id, string $name, string $mobile, string $idcard) { return static::find() ->where([ 'user_id' => $user_id, 'name' => $name, 'mobile' => $mobile, 'id_card_no' => $idcard, 'status' => static::STATUS_OK ]) ->one(); } /** * 获取用户一天内未完成签约的列表 * * @param int $mall_id 商城ID * @param int $user_id 会员ID * @return array[static] **/ public static function getUserNotAuthListByOneDay(int $mall_id, int $user_id) { return static::find() ->where(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => static::STATUS_WAIT]) ->andWhere(['>', 'created_at', bcsub(time(), 86400)]) ->all(); } /** * 当前用户信息是否正在等待签约 * * @param int $uid * @param string $name * @param string $mobile * @param string $id_card * @return boolean **/ public static function isSignWait(int $uid, string $name, string $mobile, string $id_card) { return static::find() ->select('id') ->where([ 'user_id' => $uid, 'name' => $name, 'mobile' => $mobile, 'id_card_no' => $id_card, 'status' => static::STATUS_WAIT ]) ->one() ? true : false; } /** * 解绑 * * @return boolean */ public function unbind() { $this->status = static::STATUS_UNBIND; return $this->save(); } }