67 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			67 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace addons\xilufitness\services\user;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use addons\xilufitness\services\BaseService;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class PointService extends BaseService
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    protected $model = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    protected function __initialize()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->model = new \addons\xilufitness\model\PointRule;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 获取积分规则
							 | 
						||
| 
								 | 
							
								     * @param int $rule_type 规格类型 1 支付赠送积分 2 签到课程 3 邀请好友 4 解锁勋章
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function getRuleByType(int $rule_type,int $brand_id=0){
							 | 
						||
| 
								 | 
							
								        $info = $this->model
							 | 
						||
| 
								 | 
							
								            ->where(['brand_id' => !empty($brand_id) ? $brand_id : $this->brand_id, 'rule_type' => $rule_type, 'status' => 'normal'])
							 | 
						||
| 
								 | 
							
								            ->field(['point_type','point_amount','point_ratio'])
							 | 
						||
| 
								 | 
							
								            ->find();
							 | 
						||
| 
								 | 
							
								        return $info;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 发送积分
							 | 
						||
| 
								 | 
							
								     * @param string $title 说明
							 | 
						||
| 
								 | 
							
								     * @param int $user_id 用户id
							 | 
						||
| 
								 | 
							
								     * @param int $rule_type 积分规则
							 | 
						||
| 
								 | 
							
								     * @param string $data_id 关联表的id
							 | 
						||
| 
								 | 
							
								     * @param int $point_type 变动类型
							 | 
						||
| 
								 | 
							
								     * @param float $pay_amount 支付金额
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function sendPoint(string $title, int $user_id, int $rule_type, string $data_id,
							 | 
						||
| 
								 | 
							
								                               int $point_type = 1, float $pay_amount = 0.00,int $brand_id = 0){
							 | 
						||
| 
								 | 
							
								        $pointRuleInfo = $this->getRuleByType($rule_type,$brand_id);
							 | 
						||
| 
								 | 
							
								        if(empty($this->userInfo)){
							 | 
						||
| 
								 | 
							
								            $userModel = new \addons\xilufitness\model\User;
							 | 
						||
| 
								 | 
							
								            $this->userInfo = $userModel
							 | 
						||
| 
								 | 
							
								                ->where(['id' => $user_id])
							 | 
						||
| 
								 | 
							
								                ->field(['id','nickname','avatar','gender','mobile','point','account','train_day','train_duration','train_count','is_vip'])
							 | 
						||
| 
								 | 
							
								                ->find();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $pointData['title'] = $title;
							 | 
						||
| 
								 | 
							
								        $pointData['user_id'] = $user_id;
							 | 
						||
| 
								 | 
							
								        $pointData['brand_id'] = !empty($brand_id) ? $brand_id : $this->brand_id;
							 | 
						||
| 
								 | 
							
								        $pointData['rule_type'] = $rule_type;
							 | 
						||
| 
								 | 
							
								        $pointData['data_id'] = xilufitness_get_id_value($data_id);
							 | 
						||
| 
								 | 
							
								        $pointData['point_type'] = $point_type;
							 | 
						||
| 
								 | 
							
								        $pointData['before_point'] = $this->userInfo->point ?? 0;
							 | 
						||
| 
								 | 
							
								        if(!empty($pointRuleInfo['point_ratio'])){
							 | 
						||
| 
								 | 
							
								            $pointData['point'] = bcdiv(bcmul($pay_amount,$pointRuleInfo['point_ratio'],0),100,0);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            $pointData['point'] = $pointRuleInfo['point_amount'] ?? 0;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $pointData['after_point'] = bcadd($pointData['before_point'],$pointData['point'],0);
							 | 
						||
| 
								 | 
							
								       return \think\Hook::listen('xilufitness_user_point_change',$pointData);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |