services->setting->mall->get($mall_id, 'score'); $user_score_info = UserWallet::getOne([['user_id' => $user_id, 'status' => StatusEnum::ENABLED]], true, [], false, 'score'); $user_score = $user_score_info['score'] ?? 0; if(!$setting['score_cash_radio']) throw new Exception('积分提现比例未设置'); //查询用户今天0点时有多少 $last_log = ScoreLog::find()->where(['user_id' => $user_id,'mall_id'=>$mall_id])->andWhere(['<=', 'created_at', strtotime(date('Y-m-d'))])->orderBy('id desc')->asArray()->one(); $last_num = 0; if($last_log){ if($last_log['change_type'] == 'add'){ $last_num = bcadd($last_log['change_num'],$last_log['current_num'],2); }else{ $last_num = bcsub($last_log['current_num'],$last_log['change_num'],2); } $last_num = max(0,$last_num); } $score_cash_today_limit = $setting['score_cash_today_limit'] ?? 0; if($score_cash_today_limit > 0){ //今天的最大提现数量 $max_num = bcmul($last_num,$score_cash_today_limit/100,2); }else{ //设置为0,不限制每天可提现的积分不超过当天00:00所持有积分的 $max_num = $user_score; } //每日提现上限:单位[元] $today_cash_num = 0; $score_cash_day_max_money = $setting['score_cash_day_max_money'] ?? 0; if($score_cash_day_max_money > 0){ //换算成积分 $cash_day_max = bcmul($score_cash_day_max_money,$setting['score_cash_radio'],2); $max_num = min($max_num,$cash_day_max,$user_score); //查看用户今天提现了多少 $today_cash_num = ScoreLog::find()->where([ 'user_id' => $user_id, 'mall_id'=>$mall_id, 'change_type'=> CapitalLog::CHANGE_TYPE_SUB, 'from_type' => UserWalletEnum::WITHDRAWAL, ])->andWhere(['>=', 'created_at', strtotime(date('Y-m-d'))])->sum('change_num') ?? 0; $today_cash_fail_num = ScoreLog::find()->where([ 'user_id' => $user_id, 'mall_id'=>$mall_id, 'change_type'=> CapitalLog::CHANGE_TYPE_ADD, 'from_type' => UserWalletEnum::WITHDRAWAL, 'capital_type' => UserWalletEnum::WITHDRAWAL_REFUND, ])->andWhere(['>=', 'created_at', strtotime(date('Y-m-d'))])->sum('change_num') ?? 0; $today_cash_num = bcsub($today_cash_num,$today_cash_fail_num,2); } $can_cash_num = bcsub($max_num,$today_cash_num,2); $can_cash_num = max(0,$can_cash_num); //转换成金额 $can_cash_price = bcdiv($can_cash_num,$setting['score_cash_radio'],2); return [ 'can_cash_num' => $can_cash_num, 'can_cash_price' => $can_cash_price, ]; }catch (Exception $e){ //echo $e->getMessage();exit; return [ 'can_cash_num' => 0, 'can_cash_price' => 0 ]; } } public static function checkUserCash($mall_id,$user_id,$score_num) { $can = self::userTodayCanCashNum($mall_id,$user_id); if($score_num > $can['can_cash_num']){ self::$static_error = '今日可提现积分不足'; return false; } $setting = \Yii::$app->services->setting->mall->get($mall_id, 'score'); return bcdiv($score_num,$setting['score_cash_radio'],2); } }