<?php
|
|
|
namespace app\common\model\user;
|
|
use app\common\model\BaseModel;
|
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 think\facade\Db; // by lyzflash
|
|
/**
|
* 用户模型
|
*/
|
class User extends BaseModel
|
{
|
protected $pk = 'user_id';
|
protected $name = 'user';
|
|
/**
|
* 修改器
|
*/
|
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 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;
|
}
|
}
|