<?php
|
|
|
namespace app\common\model\user;
|
|
use app\common\library\helper;
|
use app\common\model\BaseModel;
|
use app\common\model\plus\bonus\Setting as bonusSettingModel;
|
use app\common\model\user\Grade as GradeModel;
|
use app\common\model\user\PointsLog as PointsLogModel;
|
use app\common\model\supplier\User as SupplierUserModel;
|
use app\common\model\store\Clerk as StoreClerkModel;
|
use app\common\model\user\User as UserModel;
|
use app\common\model\settings\Setting as SettingModel;
|
use think\facade\Db; // by lyzflash
|
use app\common\model\plus\bonus\User as BonusUserModel;
|
use app\common\model\user\ConsumptionLog as ConsumptionLogModel;
|
/**
|
* 用户模型
|
*/
|
class User extends BaseModel
|
{
|
protected $pk = 'user_id';
|
protected $name = 'user';
|
|
public static function getOperatingSubsidy($referee_id, $setting)
|
{
|
$count=self::where('referee_id',$referee_id)->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();
|
}
|
|
}
|