belongsTo('app\\common\\model\\user\\Grade', 'grade_id', 'grade_id'); } /** * 关联收货地址表 */ public function address() { return $this->hasMany('app\\common\\model\\user\\UserAddress', 'address_id', 'address_id'); } /** * 关联供应商表 */ public function supplierUser() { return $this->hasOne('app\\common\\model\\supplier\\User', 'user_id', 'user_id'); } /** * 关联店员表 */ public function clerkUser() { return $this->hasOne('app\\common\\model\\store\\Clerk', 'user_id', 'user_id'); } /** * 关联收货地址表 (默认地址) */ public function addressDefault() { return $this->belongsTo('app\\common\\model\\user\\UserAddress', 'address_id', 'address_id'); } /** * 关联用户详细信息表 */ // public function userInfo() // { // return $this->hasOne('app\\common\\model\\user\\UserInfo', 'user_id', 'user_id'); // } /** /** * 获取用户信息 */ public static function detail($where) { $model = new static; $filter = ['is_delete' => 0]; if (is_array($where)) { $filter = array_merge($filter, $where); } else { $filter['user_id'] = (int)$where; } return $model->where($filter)->with(['address', 'addressDefault', 'grade'])->find(); } /** * 获取用户信息 */ public static function detailByUnionid($unionid) { $model = new static; $filter = ['is_delete' => 0]; $filter = array_merge($filter, ['union_id' => $unionid]); return $model->where($filter)->with(['address', 'addressDefault', 'grade'])->find(); } /** * 指定会员等级下是否存在用户 */ public static function checkExistByGradeId($gradeId) { $model = new static; return !!$model->where('grade_id', '=', (int)$gradeId) ->where('is_delete', '=', 0) ->value('user_id'); } /** * 累积用户总消费金额 */ public function setIncPayMoney($money) { return $this->where('user_id', '=', $this['user_id'])->inc('pay_money', $money)->update(); } /** * 累积用户实际消费的金额 (批量) */ public function onBatchIncExpendMoney($data) { foreach ($data as $userId => $expendMoney) { $this->where(['user_id' => $userId])->inc('expend_money', $expendMoney)->update(); event('UserGrade', $userId); } return true; } /** * 累积用户的可用积分数量 (批量) */ public function onBatchIncPoints($data) { foreach ($data as $userId => $expendPoints) { $this->where(['user_id' => $userId]) ->inc('points', $expendPoints) ->inc('total_points', $expendPoints) ->update(); event('UserGrade', $this['user_id']); } return true; } /** * 累积用户的可用积分 */ public function setIncPoints($points, $describe, $decPoints = 0, $upgrade = true) { // 新增积分变动明细 PointsLogModel::add([ 'user_id' => $this['user_id'], 'value' => $points, 'describe' => $describe, 'app_id' => $this['app_id'], ]); // 更新用户可用积分 $data['points'] = ($this['points'] + $points + $decPoints <= 0) ? 0 : $this['points'] + $points + $decPoints; // 用户总积分 if ($points > 0) { $data['total_points'] = $this['total_points'] + $points; } $this->where('user_id', '=', $this['user_id'])->update($data); if($upgrade) { event('UserGrade', $this['user_id']); } return true; } //更新用户类型 public static function updateType($user_id, $user_type) { $model = new static; return $model->where('user_id', '=', $user_id)->update([ 'user_type' => $user_type ]); } /** * 用户是否成功成为供应商,如果不是则为审核中 * 申请中的不算 */ public static function isSupplier($user_id) { return SupplierUserModel::detail([ 'user_id' => $user_id ]) != null; } /** * 用户是否成功成为供应商,如果不是则为审核中 * 申请中的不算 */ public static function isStoreClerk($user_id) { return StoreClerkModel::detail([ 'user_id' => $user_id ]) != null; } public static function isStoreClerkGly($user_id) { return StoreClerkModel::detail([ 'user_id' => $user_id, 'type'=>20 ]) != null; } /** * 累计邀请数 */ public function setIncInvite($user_id) { $this->where('user_id', '=', $user_id)->inc('total_invite')->update(); event('UserGrade', $user_id); } /** * 修改推荐人,减去旧推荐人邀请人数,加上新推荐人邀请数 by yj */ public function setOnInvite($user_id,$referee_id) { $user = $this->where('user_id', '=', $user_id)->find(); //判断有没有推荐人 if($user["referee_id"]){ $this->where('user_id', '=', $user["referee_id"])->dec('total_invite')->update(); } //更新新推荐人的邀请数 $this->where('user_id', '=', $referee_id)->inc('total_invite')->update(); event('UserGrade', $referee_id); } /* 处理瑞和旧系统的积分 */ public function syncPoints($open_id) { $user = static::detail(['open_id' => $open_id]); $old_user = Db::connect('ruihe')->table('ims_ewei_shop_member')->where('openid_wa', '=', $open_id)->find(); if ($old_user['credit1'] > 0 && $old_user['is_sync'] == 0) { $user->setIncPoints($old_user['credit1'], '旧系统剩余积分'); // 标识旧系统积分同步状态 Db::connect('ruihe')->table('ims_ewei_shop_member')->where('openid_wa', '=', $open_id)->update(['is_sync' => 1]); } return true; } }