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

440 lines
8.9 KiB
PHP

<?php
namespace app\member\model;
use app\BaseModel;
use app\massage\model\User;
use think\facade\Db;
class Integral extends BaseModel
{
//会员积分表
protected $name = 'longbing_card_v2_shop_integral_log';
protected $append = [
'create_time_text'
];
/**
* @author chenniang
* @DataTime: 2021-11-04 13:57
* @功能说明:
*/
public function getCreateTimeTextAttr($value,$data){
if(!empty($data['create_time'])){
return date('Y-m-d H:i:s',$data['create_time']);
}
}
/**
* @author chenniang
* @DataTime: 2020-07-15 09:49
* @功能说明:添加
*/
public function integralAdd($data){
$data['create_time'] = time();
$data['update_time'] = time();
$res = $this->insert($data);
return $res;
}
/**
* @author chenniang
* @DataTime: 2020-07-16 16:35
* @功能说明:列表
*/
public function integralList($dis,$page){
$data = $this->where($dis)->order(['update_time desc','id desc'])->paginate($page)->toArray();
if(!empty($data['data'])){
foreach ($data['data'] as &$v){
if($v['controller_type']==0){
$v['controller_name'] = '系统核算';
$icon = $v['integral_add']>0?'+':'-';
$integral_add = $v['integral_add']>0?$v['integral_add']:$v['integral_add']*-1;
$text = $v['integral_add']>0?'增加积分':'使用积分';
$boj = $this->returnObj($v['type']);
$refund = $v['refund']==1?'(已退款)':'';
$v['text'] = $boj.$text.$icon.$integral_add.',现积分 '.$v['integral_after'].$refund;
$v['type_text'] = $boj;
}
}
}
return $data;
}
/**
* @author chenniang
* @DataTime: 2020-09-14 15:17
* @功能说明:返回一个对象
*/
public function returnObj($type){
switch ($type){
//购买会员商品
case 0:
return '升级会员';
break;
//会员购买商品
case 1:
return '消费';
break;
//购买储值套餐赠送
case 2:
return '购买储值套餐';
break;
case 3:
return '购买商城商品';
break;
case 4:
return '购买餐饮菜品';
break;
case 5://取消订单
return '商城商品退款';
break;
case 6://售后
return '商城商品退款';
break;
case 7://
return '同步银豹';
break;
case 8://
return '报名活动';
break;
case 9://
return '购买赛车产品';
break;
case 10://
return '购买商城商品';
break;
case 11://
return '购买餐饮商品';
break;
default:
return '消费';
break;
}
}
/**
* @author chenniang
* @DataTime: 2020-04-26 17:08
* @功能说明:详情
*/
public function integralInfo($dis){
$data = $this->where($dis)->find();
return !empty($data)?$data->toArray():[];
}
/**
* @author chenniang
* @DataTime: 2020-04-26 17:13
* @功能说明:编辑
*/
public function integralUpdate($dis,$data){
$data['update_time'] = time();
$res = $this->where($dis)->update($data);
return $res;
}
/**
* @author chenniang
* @DataTime: 2020-07-31 10:28
* @功能说明:增加用户积分
*/
public function integralUserAdd($user_id,$integral,$uniacid,$status = 2,$type=0,$order_id=0){
//积分倍率
$arr = $this->pointDouble($user_id,$integral);
$integral = $arr['integral'];
//查询单日获取积分是否超限
$integral = $this->dayGetIntegral($user_id,$integral,$uniacid);
if(!empty(intval($integral))){
$member_model = new User();
$member_info = $member_model->dataInfo(['id'=>$user_id]);
$insert = [
'uniacid' => $uniacid,
'user_id' => $user_id,
'integral_add' => intval($integral),
'integral_before'=> intval($member_info['integral']),
'integral_after' => intval($member_info['integral']+$integral),
'status' => $status,
'type' => $type,
'order_id' => $order_id,
'double' => $arr['double'],
];
$res = $this->integralAdd($insert);
if($res==0){
return false;
}
$res = $member_model->dataUpdate(['id'=>$user_id],['integral'=>$insert['integral_after']]);
if($res==0){
return false;
}
}
return true;
}
/**\
* @author chenniang
* @DataTime: 2021-11-12 17:31
* @功能说明:积分倍率
*/
public function pointDouble($user_id,$integral){
$user_model = new User();
$member_level = $user_model->where(['id'=>$user_id])->value('member_level');
$arr['double'] = 1;
$arr['integral'] = $integral;
if(empty($member_level)){
return $arr;
}
$level_model = new Level();
$level = $level_model->levelInfo(['id'=>$member_level]);
if(empty($level)){
return $arr;
}
if(empty($level['integral_switch'])){
return $arr;
}
$arr['double'] = $level['integral'];
$arr['integral'] = floor($level['integral']*$integral);
return $arr;
}
/**
* @author chenniang
* @DataTime: 2021-11-12 14:05
* @功能说明:单天获得积分
*/
public function dayGetIntegral($user_id,$integral,$uniacid){
$config_model = new Config();
$config = $config_model->configInfo(['uniacid'=>$uniacid]);
if($config['integral_limit']==0){
return $integral;
}
$dis[] = ['user_id','=',$user_id];
$dis[] = ['integral_add','>',0];
//单日获取积分
$integral_day = $this->where($dis)->whereDay('create_time')->sum('integral_add');
//单日可获取最大积分
$integral_day_max = $config['integral_day_max'];
$point = $integral_day_max-$integral_day;
if($point<=0){
return 0;
}
$point = $point-$integral>0?$integral:$point;
return $point;
}
/**
* @author chenniang
* @DataTime: 2020-08-04 10:21
* @功能说明:每日领取的积分
*/
public function dayIntegral($user_id,$uniacid){
$config_model = new Config();
$config = $config_model->configInfo(['uniacid'=>$uniacid]);
if($config['integral_limit']==1){
$dis = [
'user_id' => $user_id,
'refund' => 0,
'type' => 1
];
$integral = $this->where($dis)->where('status','>',0)->whereDay('create_time')->sum('integral_add');
$re_integral = $config['integral_day_max'] - $integral;
$re_integral = $re_integral>0?$re_integral:0;
return intval($re_integral);
}
return true;
}
/**
* @author chenniang
* @DataTime: 2020-08-04 11:07
* @功能说明:给用户加积分
*/
public function incUserIntegral($order_id,$user_id,$uniacid){
$dis = [
'order_id' => $order_id,
'status' => 1
];
$info = $this->where($dis)->select()->toArray();
$member_model = new Member();
if(!empty($info)){
foreach ($info as $value){
$integral = $value['integral_add'];
$member_info = $member_model->getMemberInfo(['user_id'=>$user_id,'uniacid'=>$uniacid]);
$update = [
//修改状态
'status' => 2,
//当前
'integral_before' => intval($member_info['integral']),
//修改后对
'integral_after' => intval($member_info['integral']+$integral),
];
$this->integralUpdate(['id'=>$value['id']],$update);
if(is_numeric($integral)&&$integral>0){
$dis = [
'user_id' => $user_id
];
$member_model->incDecGrowth($dis,$integral,'integral');
}
}
}
return true;
}
}