You've already forked qlg.tsgz.moe
							
							
		
			
				
	
	
		
			180 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?php
 | 
						|
namespace wstmart\common\model;
 | 
						|
use think\Db;
 | 
						|
/**
 | 
						|
 * ============================================================================
 | 
						|
 * 券数据
 | 
						|
 */
 | 
						|
class UserVouchers extends Base{
 | 
						|
    public function startGiveVouchers(){
 | 
						|
    	set_time_limit(0);
 | 
						|
    	$sm = Model('common/SysSummary');
 | 
						|
    	$sysData= $sm->getInfo('toPayFast,toPaySlow');
 | 
						|
    	//获取代快付值
 | 
						|
		$toPayFast = $sysData['toPayFast'];
 | 
						|
		//今日代快付释放值
 | 
						|
		$payFast = round($toPayFast * (dataConf('fastPayDayScale')*0.01),2);
 | 
						|
		//获取代慢付值
 | 
						|
		$toPaySlow = $sysData['toPaySlow'];
 | 
						|
		//今日付慢付释放值
 | 
						|
		$paySlow = round($toPaySlow * (dataConf('slowPayDayScale')*0.01),2);
 | 
						|
		//应释放总额
 | 
						|
		$toPaySum = $payFast + $paySlow;
 | 
						|
		Db::startTrans();
 | 
						|
		try{            
 | 
						|
            $m = Model('common/Table');
 | 
						|
            $m->setTable('user_vouchers_summary');  
 | 
						|
            if(1 == date('j')){
 | 
						|
                //每月损耗
 | 
						|
                $monthScale = round((100-dataConf('couponsNextMonthInitSacle'))*0.01,2);               
 | 
						|
                $giveList = $m->getList([],'id, userId, expectedProductNum, expectedCouponsNum');
 | 
						|
                foreach ($giveList as &$g) {
 | 
						|
                    if($g['expectedProductNum'] > 0){
 | 
						|
                        $decNum = $g['expectedProductNum'] * $monthScale;
 | 
						|
                        $this->insertVouchersNotice($g['userId'],0,$decNum,0,$desc='预获产品券月耗损',0,1);
 | 
						|
                    }
 | 
						|
                    if($g['expectedCouponsNum'] > 0){
 | 
						|
                        $decNum = $g['expectedCouponsNum'] * $monthScale;
 | 
						|
                        $this->insertVouchersNotice($g['userId'],0,0,$decNum,$desc='预获优惠券月耗损',0,1);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }        
 | 
						|
            $where['isDisabled'] = 0;
 | 
						|
            //总预获产品券
 | 
						|
            $allPreProduct = $m->getSum($where,'expectedProductNum');
 | 
						|
            //总预获优惠券
 | 
						|
            $allPreCoupons = $m->getSum($where,'expectedCouponsNum');
 | 
						|
            //最大释放总额 预代付值 * 比例
 | 
						|
            $maxPayNum = round(($allPreProduct + $allPreCoupons) * (dataConf('couponsMaxGiveSacle')*0.01),2);
 | 
						|
			if($toPaySum > $maxPayNum){
 | 
						|
				//加入代慢付值
 | 
						|
				$addPaySlow = round($toPaySum - $maxPayNum,5);
 | 
						|
				$sm->addSysSummary(0,$addPaySlow);
 | 
						|
			}
 | 
						|
			//扣减系统释放值
 | 
						|
			$sm->addSysSummary($payFast,$paySlow,2);
 | 
						|
			//取最小值作为总释放额
 | 
						|
			$payNum = min($maxPayNum,$toPaySum);
 | 
						|
            if($payNum==0) return;
 | 
						|
			//每人应释放数
 | 
						|
			$personNum = $payNum / ($allPreProduct + $allPreCoupons);
 | 
						|
			//将所有未释放的的isGive设为0
 | 
						|
			//获取今日0点时间戳
 | 
						|
			$today = strtotime(date("Y-m-d"),time());
 | 
						|
			$m->updateInfo('giveDate < '.$today,['isGive'=>0]);
 | 
						|
			$list = $m->getList(['isDisabled'=>0,'isGive'=>0],'
 | 
						|
											id,
 | 
						|
											userId,
 | 
						|
											expectedProductNum,
 | 
						|
											expectedCouponsNum,
 | 
						|
											alreadyProductNum,
 | 
						|
											alreadyCouponsNum,
 | 
						|
											giveDay
 | 
						|
											');
 | 
						|
			$time = time();
 | 
						|
    		foreach ($list as &$v) {
 | 
						|
    			unset($data);
 | 
						|
                $minNumer = 15;
 | 
						|
                //都小于15不统计,直接加入代慢付
 | 
						|
                if($v['expectedProductNum'] <= $minNumer && $v['expectedCouponsNum'] <= $minNumer){
 | 
						|
                    $toSlowNum = round($personNum * ($v['expectedProductNum'] + $v['expectedCouponsNum']),2);
 | 
						|
                    $sm->addSysSummary(0,$toSlowNum);
 | 
						|
                    continue;
 | 
						|
                }
 | 
						|
                if($v['expectedProductNum'] < $minNumer){//预获产品券小于15;
 | 
						|
                    $personAlreadyProductNum = 0;
 | 
						|
                    $personAlreadyCouponsNum = round($personNum * ($v['expectedProductNum'] + $v['expectedCouponsNum']),2);
 | 
						|
                }else if($v['expectedCouponsNum'] < $minNumer){//预获优惠券小于15
 | 
						|
                    $personAlreadyCouponsNum = 0;
 | 
						|
                    $personAlreadyProductNum = round($personNum * ($v['expectedProductNum'] + $v['expectedCouponsNum']),2);
 | 
						|
                }else{//都大于15
 | 
						|
                    $couponsScale = dataConf('hasCoupousScale');//优惠券比例
 | 
						|
                    $productScale = 100 - $couponsScale;//产品券比例
 | 
						|
                    $personAlreadyProductNum = $personNum * round(($v['expectedProductNum'] + $v['expectedCouponsNum']) * ($productScale*0.01),2);
 | 
						|
                    $personAlreadyCouponsNum = $personNum * round(($v['expectedProductNum'] + $v['expectedCouponsNum']) * ($couponsScale*0.01),2);
 | 
						|
                }     
 | 
						|
                //实际有预获产品券小于应给值
 | 
						|
                if($v['expectedProductNum'] < $personAlreadyProductNum){
 | 
						|
                    $personAlreadyCouponsNum += $personAlreadyProductNum;
 | 
						|
                    $personAlreadyProductNum = 0;
 | 
						|
                }
 | 
						|
                //实际有预获优惠券小于应给值
 | 
						|
                if($v['expectedCouponsNum'] < $personAlreadyCouponsNum){
 | 
						|
                    $personAlreadyProductNum += $personAlreadyCouponsNum;
 | 
						|
                    $personAlreadyCouponsNum = 0;
 | 
						|
                }
 | 
						|
                //都小于就算了
 | 
						|
                if($v['expectedProductNum'] < $personAlreadyProductNum || $v['expectedCouponsNum'] < $personAlreadyCouponsNum){
 | 
						|
                    $personAlreadyProductNum = 0;
 | 
						|
                    $personAlreadyCouponsNum = 0;
 | 
						|
                }
 | 
						|
           
 | 
						|
    			
 | 
						|
    			if($personAlreadyProductNum >= 0.01){
 | 
						|
 | 
						|
                    $this->insertVouchersNotice($v['userId'],0,$personAlreadyProductNum,0,$desc='分润扣减',0,0);//预获产品券减
 | 
						|
    				//加入变动记录,最后一位//1产品券2优惠券3旺旺券4现金券
 | 
						|
    				Model('common/LogMoneys')->addMoneyLog(0,$v['userId'],0,2,'预获产品券转换所得',1,$personAlreadyProductNum,'dayPay',1);
 | 
						|
                    $data['alreadyProductNum'] = $v['alreadyProductNum'] + $personAlreadyProductNum;//已获产品券加
 | 
						|
    			}
 | 
						|
    			if($personAlreadyCouponsNum >= 0.01){
 | 
						|
                    $this->insertVouchersNotice($v['userId'],0,0,$personAlreadyCouponsNum,$desc='分润扣减',0,0);//预获优惠券减     
 | 
						|
					//加入变动记录,最后一位//1产品券2优惠券3旺旺券4现金券
 | 
						|
      				Model('common/LogMoneys')->addMoneyLog(0,$v['userId'],0,2,'预获优惠券转换所得',1,$personAlreadyCouponsNum,'dayPay',2);                                
 | 
						|
                    $data['alreadyCouponsNum'] = $v['alreadyCouponsNum'] + $personAlreadyCouponsNum;//已获优惠券加
 | 
						|
    			}
 | 
						|
                $data['isGive'] = 1;
 | 
						|
    			$data['giveDate'] = $time;
 | 
						|
    			$data['giveDay'] = $v['giveDay'] + 1;
 | 
						|
    			$m->updateInfo(['id'=>$v['id']],$data);
 | 
						|
    		}
 | 
						|
			Db::commit();
 | 
						|
			return WSTReturn("ok", 1);
 | 
						|
		}catch (\Exception $e) {
 | 
						|
            dump($e);
 | 
						|
            Db::rollback();errLog($e);
 | 
						|
            return WSTReturn($e->getMessage(),-1);
 | 
						|
        }
 | 
						|
    }
 | 
						|
    /**
 | 
						|
     * 插入会员券值记录
 | 
						|
     * @param  [type]  $userId             [会员ID]
 | 
						|
     * @param  [type]  $orderId            [订单ID]
 | 
						|
     * @param  integer $expectedProductNum [预获产品券]
 | 
						|
     * @param  integer $expectedCouponsNum [预获优惠券]
 | 
						|
     * @param  string  $desc               [备注]
 | 
						|
     * @param  string  $isAdd              [1增加0扣除]
 | 
						|
     * @return [type]                      [description]
 | 
						|
     */
 | 
						|
    public function insertVouchersNotice($userId,$orderId,$expectedProductNum=0,$expectedCouponsNum=0,$desc='',$isAdd=1,$isShow=1){
 | 
						|
    	//插入详细表
 | 
						|
    	$m = Model('common/Table');
 | 
						|
    	$m->setTable('user_vouchers_notice');
 | 
						|
    	$m->insertInfo(['userId'=>$userId,'orderId'=>$orderId,'expectedProductNum'=>$expectedProductNum,'expectedCouponsNum'=>$expectedCouponsNum,'remark'=>$desc,'moneyType'=>$isAdd,'isShow'=>$isShow,'createTime'=>time()]);
 | 
						|
    	//插入或更新详细表    	
 | 
						|
    	$m->setTable('user_vouchers_summary');
 | 
						|
    	if($summaryInfo = $m->getInfo(['userId'=>$userId],'id,expectedProductNum,expectedCouponsNum')){
 | 
						|
    		if(1 == $isAdd){
 | 
						|
    			$data['expectedProductNum'] = $summaryInfo['expectedProductNum'] + $expectedProductNum;
 | 
						|
    			$data['expectedCouponsNum'] = $summaryInfo['expectedCouponsNum'] + $expectedCouponsNum;
 | 
						|
    		}else{
 | 
						|
    			$data['expectedProductNum'] = $summaryInfo['expectedProductNum'] - $expectedProductNum;
 | 
						|
    			$data['expectedCouponsNum'] = $summaryInfo['expectedCouponsNum'] - $expectedCouponsNum;
 | 
						|
    		}
 | 
						|
    		$m->updateInfo(['id'=>$summaryInfo['id']],$data);
 | 
						|
    	}else{
 | 
						|
    		if(0 == $isAdd){
 | 
						|
    			$expectedProductNum *= -1;
 | 
						|
    			$expectedCouponsNum *= -1;
 | 
						|
    		}
 | 
						|
    		$data = compact('userId','expectedProductNum','expectedCouponsNum');
 | 
						|
    		$data['alreadyProductNum'] = 0;
 | 
						|
    		$data['alreadyCouponsNum'] = 0;
 | 
						|
    		$data['isGive'] = 1;
 | 
						|
    		$data['giveDate'] = time();
 | 
						|
    		$data['giveDay'] = 0;
 | 
						|
    		$m->insertInfo($data);
 | 
						|
    	}
 | 
						|
    }
 | 
						|
}
 |