This commit is contained in:
Jerry Yan 2020-12-14 21:48:37 +08:00
parent 4d3f38d339
commit f05f50f50f

View File

@ -7,6 +7,7 @@ use think\Db;
*/
class UserVouchers extends Base{
public function startGiveVouchers(){
$LOG = "=========================================".PHP_EOL;
if('127.0.0.1' != $ip = request()->ip(0) ) return $ip;
set_time_limit(0);
$sm = Model('common/SysSummary');
@ -26,6 +27,14 @@ class UserVouchers extends Base{
$paySlow = round($toPaySlow * (dataConf('slowPayDayScale')*0.01),5);
//应释放总额
$toPaySum = $payFast + $paySlow;
$LOG .= <<<TXT
---当前代快付值:{$HistoryToPayFast}
1、代快付释放值:{$payFast}
---当前代慢付值:{$HistoryToPaySlow}
2、代慢付释放值:{$paySlow}
5、释放总额:{$toPaySum}
TXT;
Db::startTrans();
try{
$m = Model('common/Table');
@ -52,21 +61,27 @@ class UserVouchers extends Base{
$allPreCoupons = $m->getSum($where,'expectedCouponsNum');
//最大释放总额 预代付值 * 比例
$maxPayNum = round(($allPreProduct + $allPreCoupons) * (dataConf('couponsMaxGiveSacle')*0.01),2);
$LOG .= "3、最大释放总额{$maxPayNum}".PHP_EOL;
$LOG .= "4、转换前预代付值".($allPreProduct + $allPreCoupons).PHP_EOL;
if($toPaySum > $maxPayNum){
//加入代慢付值
$LOG .= "6、成立".PHP_EOL;
$addPaySlow = round($toPaySum - $maxPayNum,5);
$LOG .= "6、代慢付增加{$addPaySlow}【应释放总额大于最大释放总额】".PHP_EOL;
$sm->addSysSummary(0,$addPaySlow,1,'应释放总额大于最大释放总额');
}
//扣减系统释放值
if ($paySlow < 0) $paySlow = 0;
if ($payFast < 0) $payFast = 0;
$minusSysNum = $payFast+$paySlow;
$LOG .= "---系统扣除:快:{$payFast};慢:{$paySlow}【扣减系统释放值】".PHP_EOL;
$sm->addSysSummary($payFast,$paySlow,2,'扣减系统释放值');
//取最小值作为总释放额
$payNum = min($maxPayNum,$toPaySum);
if($payNum==0) return;
//每人应释放数
$personNum = $payNum / ($allPreProduct + $allPreCoupons);
$LOG .= "8、计算基数1{$personNum}".PHP_EOL;
//将所有未释放的的isGive设为0
//获取今日0点时间戳
$today = strtotime(date("Y-m-d"),time());
@ -81,7 +96,10 @@ class UserVouchers extends Base{
giveDay
');
$time = time();
$LOG .= "=============开始循环=============".PHP_EOL;
foreach ($list as &$v) {
$LOG .= "===========当前用户#【{$v['userId']}】==========".PHP_EOL;
$LOG .= "当前用户预获优惠券:{$v['expectedCouponsNum']};预获产品券:{$v['expectedProductNum']}".PHP_EOL;
unset($data);
$minNumer = 15;
//都小于15不统计直接加入代慢付
@ -90,47 +108,76 @@ class UserVouchers extends Base{
$couponsScale = dataConf('hasCoupousScale');//优惠券比例
$productScale = 100 - $couponsScale;//产品券比例
if($v['expectedProductNum'] <= $minNumer && $v['expectedCouponsNum'] <= $minNumer){
$LOG .= "9、预获优惠券{$v['expectedCouponsNum']};预获产品券:{$v['expectedProductNum']}均小于15".PHP_EOL;
$toSlowNum = round($personNum * ($v['expectedProductNum'] + $v['expectedCouponsNum']),2);
$LOG .= "9、退回系统慢值{$toSlowNum}".PHP_EOL;
$sm->addSysSummary(0,$toSlowNum,1,'用户ID['.$v['userId'].']双预获券都小于15/日转换退回');
$LOG .= "=========当前用户#【{$v['userId']}】结束========".PHP_EOL;
continue;
}else if($v['expectedProductNum'] <= $minNumer){//预获产品券小于15;
$LOG .= "10、预获产品券{$v['expectedProductNum']}小于15".PHP_EOL;
$personAlreadyProductNum = 0;
$personAlreadyCouponsNum = round($personNum * ($v['expectedProductNum'] + $v['expectedCouponsNum']),2);
$LOG .= "10、用户需要获得的已获产品券{$personAlreadyProductNum}".PHP_EOL;
$LOG .= "10、用户需要获得的已获优惠券{$personAlreadyCouponsNum}".PHP_EOL;
}else if($v['expectedCouponsNum'] <= $minNumer){//预获优惠券小于15
$LOG .= "11、预获优惠券{$v['expectedCouponsNum']}小于15".PHP_EOL;
$personAlreadyCouponsNum = 0;
$personAlreadyProductNum = round($personNum * ($v['expectedProductNum'] + $v['expectedCouponsNum']),2);
$LOG .= "10、用户需要获得的已获产品券{$personAlreadyProductNum}".PHP_EOL;
$LOG .= "10、用户需要获得的已获优惠券{$personAlreadyCouponsNum}".PHP_EOL;
}else{//都大于15
$personAlreadyProductNum = $personNum * round(($v['expectedProductNum'] + $v['expectedCouponsNum']) * ($productScale*0.01),2);
$personAlreadyCouponsNum = $personNum * round(($v['expectedProductNum'] + $v['expectedCouponsNum']) * ($couponsScale*0.01),2);
$LOG .= "8.1、用户需要获得的已获产品券:{$personAlreadyProductNum}".PHP_EOL;
$LOG .= "8.2、用户需要获得的已获优惠券:{$personAlreadyCouponsNum}".PHP_EOL;
}
$LOG .= "--->用户需要获得的已获产品券:{$personAlreadyProductNum}".PHP_EOL;
$LOG .= "--->用户需要获得的已获优惠券:{$personAlreadyCouponsNum}".PHP_EOL;
//都小于就算了
if($v['expectedProductNum'] < $personAlreadyProductNum && $v['expectedCouponsNum'] < $personAlreadyCouponsNum){
$LOG .= "12、用户需要获得的已获产品券{$personAlreadyProductNum} < 预获产品券:{$v['expectedProductNum']}".PHP_EOL;
$LOG .= "12、用户需要获得的已获优惠券{$personAlreadyCouponsNum} < 预获优惠券:{$v['expectedCouponsNum']}".PHP_EOL;
$personAlreadyProductNum = 0;
$personAlreadyCouponsNum = 0;
$LOG .= "---用户需要获得的已获产品券:{$personAlreadyProductNum}".PHP_EOL;
$LOG .= "---用户需要获得的已获优惠券:{$personAlreadyCouponsNum}".PHP_EOL;
}
//实际有预获产品券小于应给值
if($v['expectedProductNum'] < $personAlreadyProductNum){
$LOG .= "13、用户需要获得的已获产品券{$personAlreadyProductNum} < 预获产品券:{$v['expectedProductNum']}".PHP_EOL;
$personAlreadyCouponsNum += $personAlreadyProductNum;
$personAlreadyProductNum = 0;
$LOG .= "---用户需要获得的已获产品券:{$personAlreadyProductNum}".PHP_EOL;
$LOG .= "---用户需要获得的已获优惠券:{$personAlreadyCouponsNum}".PHP_EOL;
}
//实际有预获优惠券小于应给值
if($v['expectedCouponsNum'] < $personAlreadyCouponsNum){
$LOG .= "14、用户需要获得的已获优惠券{$personAlreadyCouponsNum} < 预获优惠券:{$v['expectedCouponsNum']}".PHP_EOL;
$personAlreadyProductNum += $personAlreadyCouponsNum;
$personAlreadyCouponsNum = 0;
$LOG .= "---用户需要获得的已获产品券:{$personAlreadyProductNum}".PHP_EOL;
$LOG .= "---用户需要获得的已获优惠券:{$personAlreadyCouponsNum}".PHP_EOL;
}
$LOG .= "最终:用户需要获得的已获产品券:{$personAlreadyProductNum}".PHP_EOL;
$LOG .= "最终:用户需要获得的已获优惠券:{$personAlreadyCouponsNum}".PHP_EOL;
if($personAlreadyProductNum >= 0.01){
$LOG .= "用户扣预获产品券:{$personAlreadyProductNum}【预获产品券日转换所扣】".PHP_EOL;
$this->insertVouchersNotice($v['userId'],0,$personAlreadyProductNum,0,$desc='预获产品券日转换所扣',0,0);//预获产品券减
//加入变动记录,最后一位//1产品券2优惠券3旺旺券4现金券
$LOG .= "用户加已获产品券:{$personAlreadyProductNum}【预获产品券日转换所得】".PHP_EOL;
$this->insertAlreadyVouchersNotice($v['userId'],0,$personAlreadyProductNum,0,'预获产品券日转换所得',1,1);
// Model('common/LogMoneys')->addMoneyLog(0,$v['userId'],0,2,'预获产品券日转换所得',1,$personAlreadyProductNum,'dayPay',1);
$data['alreadyProductNum'] = $v['alreadyProductNum'] + $personAlreadyProductNum;//已获产品券加
}
if($personAlreadyCouponsNum >= 0.01){
$LOG .= "用户扣预获优惠券:{$personAlreadyCouponsNum}【预获优惠券日转换所扣】".PHP_EOL;
$this->insertVouchersNotice($v['userId'],0,0,$personAlreadyCouponsNum,$desc='预获优惠券日转换所扣',0,0);//预获优惠券减
//加入变动记录,最后一位//1产品券2优惠券3旺旺券4现金券
$LOG .= "用户加已获优惠券:{$personAlreadyCouponsNum}【预获优惠券日转换所得】".PHP_EOL;
$this->insertAlreadyVouchersNotice($v['userId'],0,0,$personAlreadyCouponsNum,'预获优惠券日转换所得',1,1);
// Model('common/LogMoneys')->addMoneyLog(0,$v['userId'],0,2,'预获优惠券日转换所得',1,$personAlreadyCouponsNum,'dayPay',2);
$data['alreadyCouponsNum'] = $v['alreadyCouponsNum'] + $personAlreadyCouponsNum;//已获优惠券加
@ -139,26 +186,45 @@ class UserVouchers extends Base{
$data['giveDate'] = $time;
$data['giveDay'] = $v['giveDay'] + 1;
Db::name('user_vouchers_summary')->where(['id'=>$v['id']])->update($data);
$LOG .= "=========当前用户#【{$v['userId']}】结束========".PHP_EOL;
}
Db::commit();
$LOG .= "=============循环结束=============".PHP_EOL;
Db::startTrans();
// 每次所得值费、税前同时扣减“助购预获”值和“预获产品券”值直至减为负数为止负数部分按每天0.1%耗损。
// A、当“助购预获”值为负数时每天0.1%耗损在“预获产品券”值扣减。
// B、当“预获产品券”值为负数时每天0.1%耗损在“预获优惠券”值扣减。
// C、当“助购预获”值和“预获产品券”值同为负数时每天0.1%耗损在“预获优惠券”值同时扣减。
$data = Db::name('user_vouchers_summary')->whereOr(["helpSaleNum"=>["lt", 0]])->whereOr(["expectedProductNum"=>["lt", 0]])->select();
$LOG .= "=============开始循环=============".PHP_EOL;
foreach ($data as $_each){
$LOG .= "===========当前用户#【{$_each['userId']}】==========".PHP_EOL;
$LOG .= "当前用户预获优惠券:{$_each['expectedCouponsNum']};预获产品券:{$_each['expectedProductNum']};助购券值:{$_each["helpSaleNum"]}".PHP_EOL;
if($_each["expectedProductNum"]<0){
$LOG .= "17.1、成立".PHP_EOL;
$count = abs((float)$_each["expectedProductNum"]);
if($_each["helpSaleNum"] < 0)$count+=abs((float)$_each["helpSaleNum"]);
model('common/UserVouchers')->insertVouchersNotice($_each["userId"], 0, 0, $count*((float)dataConf("deductionRateWhennegPreCoupons")/100),
$LOG .= "17.1、负数值:{$count}".PHP_EOL;
if($_each["helpSaleNum"] < 0) {
$LOG .= "17.2、成立".PHP_EOL;
$count += abs((float)$_each["helpSaleNum"]);
$LOG .= "17.2、负数值:{$count}".PHP_EOL;
}
$val = $count*((float)dataConf("deductionRateWhennegPreCoupons")/100);
$LOG .= "17.3、:扣除预获优惠券:{$val}【助购券负值预获优惠券日损耗所扣】".PHP_EOL;
model('common/UserVouchers')->insertVouchersNotice($_each["userId"], 0, 0, $val,
"助购券负值预获优惠券日损耗所扣", 0);
}else{
$LOG .= "17.4、成立".PHP_EOL;
$count = abs((float)$_each["helpSaleNum"]);
model('common/UserVouchers')->insertVouchersNotice($_each["userId"], 0, $count*((float)dataConf("deductionRateWhennegPreCoupons")/100),
$LOG .= "17.4、负数值:{$count}".PHP_EOL;
$val = $count*((float)dataConf("deductionRateWhennegPreCoupons")/100);
$LOG .= "17.5、:扣除预获优惠券:{$val}【助购券负值预获优惠券日损耗所扣】".PHP_EOL;
model('common/UserVouchers')->insertVouchersNotice($_each["userId"], 0, $val,
0, "助购券负值预获产品券日损耗所扣", 0);
}
$LOG .= "=========当前用户#【{$v['userId']}】结束========".PHP_EOL;
}
$LOG .= "=============循环结束=============".PHP_EOL;
Db::commit();
$sm = Model('common/SysSummary');
$sysData= $sm->getInfo('toPayFast,toPaySlow');
@ -171,7 +237,19 @@ class UserVouchers extends Base{
$deltaSlow = $HistoryToPaySlow - $toPaySlow;
$deltaConv = $HistoryVouchersSummarySum - $vouchersSummarySum;
$unConv = $minusSysNum - $deltaConv;
$LOG .= <<<TXT
---当前代快付值:{$toPayFast}
---当前代慢付值:{$toPaySlow}
18、转换后预代付值:{$vouchersSummarySum}
19、预代付值差值:{$deltaConv}
---代快付值差值:{$deltaFast}
---代慢付值差值:{$deltaSlow}
---未转换值:{$unConv}
TXT;
if ($unConv > 0) $sm->addSysSummary(0, $unConv, 1, "加入系统未转换值");
\think\Log::write($LOG);
\think\Log::write(<<<TEXT
系统未转换值调试内容:
hpf={$HistoryToPayFast}