Files
Smart-Farm/app/member/model/Level.php
2025-12-22 14:32:54 +08:00

739 lines
15 KiB
PHP

<?php
namespace app\member\model;
use app\BaseModel;
use app\massage\model\User;
use app\member\info\PermissionMember;
use think\facade\Db;
class Level extends BaseModel
{
//会员等级表
protected $name = 'longbing_card_v2_member_level';
/**
* @author chenniang
* @DataTime: 2020-07-15 09:49
* @功能说明:添加
*/
public function levelAdd($data){
$data['status'] = 1;
$data['create_time'] = time();
$data['update_time'] = time();
$goods_id = [];
$rights = [];
$coupon = [];
$stored = [];
//关联的商品
if(isset($data['goods_id'])){
$goods_id = $data['goods_id'];
unset($data['goods_id']);
}
//关联的权益
if(isset($data['rights'])){
$rights = $data['rights'];
unset($data['rights']);
}
//关联的优惠券
if(isset($data['coupon'])){
$coupon = $data['coupon'];
unset($data['coupon']);
}
//关联储值
if(isset($data['stored_id'])){
$stored = $data['stored_id'];
unset($data['stored_id']);
}
$res = $this->insert($data);
//id
$level_id = $this->getLastInsID();
//修改相关数据
$this->updateSome($goods_id,$rights,$level_id,$data,$coupon,$stored);
return $res;
}
/**
* @author chenniang
* @DataTime: 2020-09-10 15:13
* @功能说明:初始化
*/
public function initLevel($dis){
//初始化普通会员
if($dis['type']==0){
for ($i=1;$i<11;$i++){
$insert[$i]['uniacid'] = $dis['uniacid'];
$insert[$i]['status'] = 0;
$insert[$i]['create_time'] = time();
$insert[$i]['update_time'] = time();
$insert[$i]['top'] = $i;
}
$this->saveAll($insert);
}else{
//初始化puls会员
$insert['uniacid'] = $dis['uniacid'];
$insert['status'] = 0;
$insert['create_time'] = time();
$insert['update_time'] = time();
$insert['type'] = 1;
$insert['top'] = 999;
$insert['over_time'] = -1;
$this->insert($insert);
}
return true;
}
/**
* @author chenniang
* @DataTime: 2020-04-26 17:12
* @功能说明:列表
*/
public function levelList($dis,$page=10){
$data = $this->where($dis)->order('id')->paginate($page)->toArray();
$right_model = new Rights();
if(!empty($data['data'])){
foreach ($data['data'] as &$v){
$v['rights'] = $right_model->customRights($v['id']);
//商品折扣
if($v['discount_switch']==1){
array_unshift($v['rights'],'商品打折');
}
//积分倍率
if($v['integral_switch']==1){
array_unshift($v['rights'],'积分倍率'.$v['integral'].'倍');
}
//赠送积分
if($v['send_integral_switch']==1){
array_unshift($v['rights'],'赠送积分'.$v['send_integral']);
}
// //赠送优惠券
if($v['coupon_switch']==1){
array_unshift($v['rights'],'赠送卡券');
}
$user_model = new User();
//会员人数
$v['member_num'] = $user_model->where(['member_level'=>$v['id']])->count();
}
}
return $data;
}
/**
* @author chenniang
* @DataTime: 2020-04-26 17:08
* @功能说明:详情
*/
public function levelInfo($dis){
$data = $this->where($dis)->find();
return !empty($data)?$data->toArray():[];
}
/**
* @author chenniang
* @DataTime: 2020-04-26 17:13
* @功能说明:删除直播
*/
public function levelUpdate($dis,$data){
$data['update_time'] = time();
$goods_id = [];
$rights = [];
$coupon = [];
$stored = [];
//关联的权益
if(isset($data['rights'])){
$rights = $data['rights'];
unset($data['rights']);
}
//关联的优惠券
if(isset($data['coupon'])){
$coupon = $data['coupon'];
unset($data['coupon']);
}
$res = $this->where($dis)->update($data);
$this->updateSome($rights,$data['id'],$data,$coupon);
return $res;
}
/**
* @param $level_id
* @param $data
* @功能说明:修改相关数据
* @author chenniang
* @DataTime: 2020-07-15 13:40
*/
public function updateSome($rights,$level_id,$data,$coupon=[]){
//关联的商品模型
$rights_model = new RightsRelation();
$rights_model->where(['member_id'=>$level_id])->delete();
//添加关联的商品
if(!empty($rights)){
array_walk($rights, function ($value, $key) use (&$rights, $level_id,$data) {
$rights[$key] = [
//商品id
'rights_id' => $value['id'],
//等级id
'member_id' => $level_id,
'uniacid' => $data['uniacid'],
'type' => $value['type']
];
});
//添加
$res = $rights_model->saveAll($rights);
}
//优惠券关联模型
$coupon_model = new Coupon();
//添加
$coupon_model->addCoupon($coupon,$level_id,$data);
return true;
}
/**
* @author chenniang
* @DataTime: 2020-07-16 11:08
* @功能说明:获取成长值区间
*/
public function getGrowth($level){
$data = $this->where(['id'=>$level])->find();
$dis[]= ['uniacid','=',$data['uniacid']];
$dis[]= ['growth','>',$data['growth']];
$top = $this->where($dis)->order('growth')->find();
$info['start_growth'] = $data['growth'];
$info['end_growth'] = !empty($top['growth'])?$top['growth']:0;
return $info;
}
/**
* @author chenniang
* @DataTime: 2020-07-17 13:22
* @功能说明:会员商品
*/
public function memberGoods($uniacid,$level_id){
$dis[] = ['uniacid','=',$uniacid];
$dis[] = ['status','=',1];
$dis[] = ['is_member','=',1];
$id = $this->haveSelectGoods($uniacid,$level_id);
$dis[] = ['id','not in',$id];
$data = Db::name('longbing_card_goods')->where($dis)->field('name,id')->select();
return $data;
}
/**
* @author chenniang
* @DataTime: 2020-09-09 13:39
* @功能说明:下拉框
*/
public function storedSelect($uniacid,$level_id){
$id = $this->haveSelectStored($uniacid,$level_id);
$dis[] = ['uniacid','=',$uniacid];
$dis[] = ['status','=',1];
$dis[] = ['id','not in',$id];
$data = Db::name('longbing_card_member_stored')->where($dis)->order('top desc,id desc')->select()->toArray();
return $data;
}
/**
* @author chenniang
* @DataTime: 2020-09-09 14:09
* @功能说明:已经选了储值
*/
public function haveSelectStored($uniacid,$level_id){
$dis[] = ['a.uniacid','=',$uniacid];
$dis[] = ['b.uniacid','=',$uniacid];
$dis[] = ['a.member_id','<>',$level_id];
$store_level_model = new StoredLevel();
$id = $store_level_model->alias('a')
->join('longbing_card_member_level b','a.member_id = b.id')
->where($dis)
->column('a.stored_id');
return $id;
}
/**
* @author chenniang
* @DataTime: 2020-08-06 15:21
* @功能说明:已经选了的商品
*/
public function haveSelectGoods($uniacid,$level_id){
$dis[] = ['a.uniacid','=',$uniacid];
$dis[] = ['b.uniacid','=',$uniacid];
$dis[] = ['a.member_id','<>',$level_id];
$goods_model = new Goods();
$id = $goods_model->alias('a')
->join('longbing_card_member_level b','a.member_id = b.id')
->where($dis)
->column('goods_id');
return $id;
}
/**
* @param $uniacid
* @功能说明:会员权益
* @author chenniang
* @DataTime: 2020-07-22 14:23
*/
public function memberRights($uniacid,$type = 0){
$dis[] = ['uniacid','=',$uniacid];
$dis[] = ['status','=',1];
$dis[] = ['type','=',$type];
$rights_model = new Rights();
$data = $rights_model->where($dis)->field('title,id,is_up')->select();
return $data;
}
/**
* @author chenniang
* @DataTime: 2020-07-27 14:14
* @功能说明:检测状态
*/
public function checkStatus($id,$status){
$info = $this->levelInfo(['id'=>$id]);
if(empty($info)){
return [ 'code' => 400,'msg' => '未找到' ];
}
//开启
if($status==1){
$dis[] = ['uniacid','=',$info['uniacid']];
$dis[] = ['status','=',0];
$dis[] = ['type','=',0];
$data = $this->where($dis)->order('top')->find();
if($data['id']!=$id){
return [ 'code' => 400,'msg' => '请先开启上级或下级'];
}
}
//关闭
if($status==0){
$dis[] = ['uniacid','=',$info['uniacid']];
$dis[] = ['status','=',1];
$dis[] = ['type','=',0];
$data = $this->where($dis)->order('top desc')->find();
if($data['id'] != $id){
return [ 'code' => 400,'msg' => '请先关闭上级或下级'];
}
}
return [ 'code' => 200,'msg' => '' ];
}
/**
* @author chenniang
* @DataTime: 2020-07-28 11:23
* @功能说明:获取等级
*/
public function getMemberLevel($uniacid,$growth,$type = 0){
$where = [
'uniacid' => $uniacid,
'status' => 1,
'type' => 0
];
if($type==0){
$data = $this->where($where)->where('growth','>',$growth)->order('growth')->find();
}else{
$data = $this->where($where)->where('growth','<=',$growth)->order('growth desc')->find();
}
return !empty($data)?$data->toArray():[];
}
/**
* @author chenniang
* @DataTime: 2021-11-10 14:09
* @功能说明:获取用户等级
*/
public function getUserLevelV2($user_id){
$dis = [
'b.id' => $user_id
];
$data = $this->alias('a')
->join('massage_service_user_list b','a.id = b.member_level')
->where($dis)
->field('a.*')
->find();
return !empty($data)?$data->toArray():[];
}
/**
* @author chenniang
* @DataTime: 2020-09-18 10:14
* @功能说明:获取plus会员
*/
public function getPlusLvel($uniacid){
$where = [
'uniacid' => $uniacid,
'status' => 1,
'type' => 1,
'top' => 999
];
$data = $this->where($where)->order('growth')->find();
return !empty($data)?$data->toArray():[];
}
/**
* @author chenniang
* @DataTime: 2020-07-30 09:45
* @功能说明:获取用户的等级
*/
public function getUserLevel($uid,$uniacid){
$member_model = new Member();
$over_time = $member_model->where(['user_id'=>$uid])->value('over_time');
//查看是否是plus会员 -1是永久有效
if($over_time>time()||$over_time==-1){
$level = $this->getPlusLvel($uniacid);
if(!empty($level)){
return $level;
}
}
$growth = $member_model->where(['user_id'=>$uid])->value('growth');
$growth = !empty($growth)?$growth:0;
$level = $this->getMemberLevel($uniacid,$growth,1);
return $level;
}
/**
* @author chenniang
* @DataTime: 2020-08-07 09:39
* @功能说明:
*/
public function getAllLevel($uniacid){
$where = [
'uniacid' => $uniacid,
'status' => 1,
// 'type' => 0
];
$son_level = $this->where($where)->column('id');
return $son_level;
}
/**
* @author chenniang
* @DataTime: 2020-07-30 09:53
* @功能说明:获取下级或者上级的等级
*/
public function getSonLevel($level,$uniacid,$type=0){
$where = [
'uniacid' => $uniacid,
'status' => 1,
];
if($type==0){
$son_level = $this->where($where)->where('top','<',$level['top'])->column('id');
}else{
$icon = $level['top']==999?'>=':'>';
$son_level = $this->where($where)->where('top',$icon,$level['top'])->column('id');
}
return $son_level;
}
/**
* @author chenniang
* @DataTime: 2020-07-31 10:39
* @功能说明:升级用户的权益
*/
public function upUserRights($level,$order){
$uniacid = $order['uniacid'];
$user_id = $order['user_id'];
$integral_model = new Integral();
$member_model = new Member();
$coupon_model = new Coupon();
$level_info = $this->levelInfo(['top'=>$level,'uniacid'=>$uniacid]);
//增加积分记录
$integral_model->integralUserAdd($user_id,$level_info['send_integral'],$uniacid);
//加会员的积分
$dis = [
'user_id' => $user_id
];
$member_model->incDecGrowth($dis,$level_info['send_integral'],'integral');
//赠送优惠券
$coupon_model->insertCoupon($level_info,$order);
//第一次升级时候 修改创建时间
$member_model->where(['user_id'=>$order['user_id'],'is_vip'=>0])->update(['create_time'=>time(),'is_vip'=>1]);
return true;
}
/**
* @author chenniang
* @DataTime: 2020-08-04 17:22
* @功能说明:会员成长值
*/
public function memberGrowth($uniacid){
$data = $this->where(['uniacid'=>$uniacid,'status'=>1,'type'=>0])->min('growth');
return $data;
}
/**
* @author chenniang
* @DataTime: 2020-09-18 17:02
* @功能说明:
*/
public function upUserRightsEnd($update,$order){
$user_id = $order['user_id'];
$uniacid = $order['uniacid'];
$member_model = new Member();
//还未升级以前的等级
$level_start = $this->getUserLevel($user_id,$uniacid);
//如果空就不是会员
$level_start = !empty($level_start['top'])?$level_start['top']:0;
//更新会员信息
$member_model->where(['user_id'=>$user_id])->update($update);
//增加后的等级
$level_end = $this->getUserLevel($user_id,$uniacid);
$level_end = !empty($level_end['top'])?$level_end['top']:0;
//普通会员升级礼包
if($level_end>$level_start){
$this->upUserRights($level_end,$order);
}
return true;
}
}