where('grade_id','in',$setting['referee_grade_ids'])->count(); if ($count>=$setting['referee_grade_count']){ return true; } return false; } /** * 修改器 */ public function getBirthdayAttr($value) { return $value ? date("Y-m-d",$value) : ''; } /** * 修改器 */ public function setBirthdayAttr($value) { return $value ? strtotime($value) : 0; } /** * 关联会员等级表 */ public function grade() { return $this->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 onBatchIncConsumption($data) { foreach ($data as $userId => $expendPoints) { $this->where(['user_id' => $userId]) ->inc('consumer_coupon', $expendPoints) ->inc('total_expend_money', $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 function setIncConsumption($consumption, $describe, $decConsumption = 0, $upgrade = true) { // 新增消费券变动明细 ConsumptionLogModel::add([ 'user_id' => $this['user_id'], 'value' => $consumption, 'describe' => $describe, 'app_id' => $this['app_id'], ]); // 更新用户可用消费券 $data['consumer_coupon'] = ($this['consumer_coupon'] + $consumption + $decConsumption <= 0) ? 0 : $this['consumer_coupon'] + $consumption + $decConsumption; // 用户总消费券 if ($consumption > 0) { $data['total_expend_money'] = $this['total_expend_money'] + $consumption; } $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; } public static function getUserByIds($ids, $field = '') { $ids = is_array($ids) ?: explode(',', $ids); $model = new static; if ($field) { $model = $model->field($field); } return $model->where('user_id', 'in', $ids)->select(); } /** * 购买商品成功:累积购买商品次数 */ public static function setRepurchaseFrequency($user_id) { $user= self::detail($user_id); $purchase_count=$user['purchase_count']+1; if ($purchase_count==1&&$user['referee_id']){ $referee= self::detail($user['referee_id']); if ($referee){ $settingConsumption=SettingModel::getItem('consumption'); if ($settingConsumption['give_away']){ $referee->setIncConsumption($settingConsumption['give_away'], '直推首单礼包'); } } } /*if ($purchase_count>11){ return false; }*/ self::where('user_id',$user_id)->update([ 'purchase_count'=>$purchase_count ]); // 用户等级 event('UserGrade', $user_id); $bonusUser=BonusUserModel::detail($user_id); if ($bonusUser){ return BonusUserModel::detail($user_id)->save([ 'purchase_count'=>$purchase_count ]); } return true; } /** * 取消订单:减少累积购买商品次数 */ public static function decreasePurchaseCount($user_id,$product,$app_id) { // 验证是否设置 $config = bonusSettingModel::getItem('basic', $app_id); if (empty($config['become__buy_product_ids'])) { return false; } // 整理商品id集 $productIds = helper::getArrayColumn($product, 'product_id'); // 判断商品是否在设置范围内 $intersect = array_intersect($productIds, $config['become__buy_product_ids']); if (empty($intersect)) { return false; } $quantity=0; foreach ($product as $item){ // 检查商品是否是指定的分红商品 if (in_array($item['product_id'], $config['become__buy_product_ids'])||$item['is_vip']==1) { // 获取商品数量 $quantity+= $item['total_num']; } } $user= self::detail($user_id); $purchase_count=$user['purchase_count']-$quantity; if ($purchase_count<0){ $purchase_count=0; } $grade=(new GradeModel())->where('purchase_count','<=',$purchase_count)->order('purchase_count','desc')->find(); self::where('user_id',$user_id)->update([ 'purchase_count'=>$purchase_count, 'grade_id'=>$grade['grade_id'] ]); // 用户等级 event('UserGrade', $user_id); $bonusUser=BonusUserModel::detail($user_id); if ($bonusUser){ return BonusUserModel::detail($user_id)->save([ 'purchase_count'=>$purchase_count ]); } return true; } /** * 获取指定等级推荐人数量 */ public function getRefereeGradeCount($user_id,$referee_grade_ids) { return $this->where('referee_id', 'in', $user_id)->where('grade_id', 'in', $referee_grade_ids)->count(); } }