| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- <?php
- namespace common\logic\user;
- use common\enums\StatusEnum;
- use common\enums\UserWalletEnum;
- use common\models\common\CapitalLog;
- use common\models\common\ScoreLog;
- use common\models\user\UserWallet;
- use common\traits\ErrorTrait;
- use Yii;
- use Exception;
- /**
- *
- */
- class ScoreLogic
- {
- use ErrorTrait;
- public static function userTodayCanCashNum($mall_id,$user_id): array
- {
- try{
- $setting = \Yii::$app->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);
- }
- }
|