Преглед изворни кода

Merge branch 'bugfix/2035-remain-not-minus'

theo пре 3 година
родитељ
комит
b863a1c459
3 измењених фајлова са 49 додато и 36 уклоњено
  1. 17 12
      common/helpers/bonus/BonusSend.php
  2. 14 10
      common/helpers/bonus/PerfCalc.php
  3. 18 14
      common/models/forms/OrderForm.php

+ 17 - 12
common/helpers/bonus/BonusSend.php

@@ -131,16 +131,19 @@ class BonusSend extends BaseObject {
      */
     public function putFakeOrder() {
         echo('开始处理-假订单' . PHP_EOL);
+        $sysConfig = Cache::getSystemConfig();
+        $mesureUpCondition =  $sysConfig['monthPcsPvFxCondition']['VALUE']; // 月达标条件 NG默认30
         $fakeOrder= Order::find()->where(['PERIOD_NUM'=>$this->_periodNum, 'IS_AUTO'=>'1'])->asArray()->all();
         foreach($fakeOrder as $fOrder){
             $oRemainPv=RemainPv::findOne(["USER_ID"=>$fOrder['USER_ID']]);
             $transactionRemain = \Yii::$app->db->beginTransaction();
             try{
+                $fakeOrderPv = $oRemainPv->REMAIN_PV>=$mesureUpCondition?$mesureUpCondition:$oRemainPv->REMAIN_PV;
                 $flowRemainPvModel = new FlowRemainPv();
                 $flowRemainPvModel->ID = $this->_generateSn();
                 $flowRemainPvModel->USER_ID = $fOrder['USER_ID'];
-                $flowRemainPvModel->REMAIN_PV_FLOW = -30;
-                $flowRemainPvModel->REMAIN_PV_TOTAL = $oRemainPv->REMAIN_PV - 30;
+                $flowRemainPvModel->REMAIN_PV_FLOW = 0 - $fakeOrderPv;
+                $flowRemainPvModel->REMAIN_PV_TOTAL = $oRemainPv->REMAIN_PV - $fakeOrderPv;
                 $flowRemainPvModel->PERIOD_NUM = $this->_periodNum;
                 $flowRemainPvModel->UPDATED_AT = Date::nowTime();
                 $flowRemainPvModel->ORDER_SN = $fOrder['SN'];
@@ -148,7 +151,7 @@ class BonusSend extends BaseObject {
                     $this->addErrors($flowRemainPvModel->getErrors());
                     return false;
                 }
-                $oRemainPv->updateCounters(['REMAIN_PV'=>-30]);
+                $oRemainPv->updateCounters(['REMAIN_PV'=>0-$fakeOrderPv]);
                 $transactionRemain->commit();
             } catch (Exception $e) {
                 $transactionRemain->rollBack();
@@ -246,7 +249,7 @@ class BonusSend extends BaseObject {
             // $this->_updatePercent(95);
             // $t9 = microtime(true);
             // echo('更新会员累计月业绩完成,耗时:' . round($t9 - $t8, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
-            
+
             // 开启子进程去完成下面的循环发放和循环改聘级和循环更新累计业绩
             /*$process = new Process('sendBonus', 3);
             $process->run(function($workId, $pmid){
@@ -278,17 +281,19 @@ class BonusSend extends BaseObject {
      *
      */
     private function _calcRemainPv(){
-        $orders = Order::find()->where('PERIOD_NUM=:PERIOD_NUM AND REMAIN_PV>0',[':PERIOD_NUM'=>$this->_periodNum])->asArray()->all();
+        $sysConfig = Cache::getSystemConfig();
+        $mesureUpCondition =  $sysConfig['monthPcsPvFxCondition']['VALUE']; // 月达标条件 NG默认30
+        $orders = Order::find()->where('PERIOD_NUM=:PERIOD_NUM AND REMAIN_PV>0 AND IS_DELETE=0',[':PERIOD_NUM'=>$this->_periodNum])->asArray()->all();
         foreach($orders as $order){
             $oRemainPv = RemainPv::find()->where(['USER_ID' => $order['USER_ID']])->one();
-
+            $myRemainPv = $oRemainPv?$oRemainPv['REMAIN_PV']:0;
             $transactionRemain = \Yii::$app->db->beginTransaction();
             try{
                 $flowRemainPvModel = new FlowRemainPv();
                 $flowRemainPvModel->ID = $this->_generateSn();
                 $flowRemainPvModel->USER_ID = $order['USER_ID'];
                 $flowRemainPvModel->REMAIN_PV_FLOW = $order['REMAIN_PV'];
-                $flowRemainPvModel->REMAIN_PV_TOTAL = $oRemainPv['REMAIN_PV'] + $order['REMAIN_PV'];
+                $flowRemainPvModel->REMAIN_PV_TOTAL = $myRemainPv + $order['REMAIN_PV'];
                 $flowRemainPvModel->PERIOD_NUM = $this->_periodNum;
                 $flowRemainPvModel->UPDATED_AT = Date::nowTime();
                 $flowRemainPvModel->ORDER_SN = $order['SN'];
@@ -417,7 +422,7 @@ class BonusSend extends BaseObject {
         $allData = CalcBonus::find()
         ->yearMonth($this->_calcYearMonth)
         ->where(
-            '(IS_SENT=0 OR IS_SENT=2) AND CALC_MONTH=:CALC_MONTH AND PERIOD_NUM=:PERIOD_NUM', 
+            '(IS_SENT=0 OR IS_SENT=2) AND CALC_MONTH=:CALC_MONTH AND PERIOD_NUM=:PERIOD_NUM',
             [':CALC_MONTH' => $this->_calcYearMonth, ':PERIOD_NUM' => $periodNum]
         )
         ->limit($this->_limit)
@@ -569,7 +574,7 @@ class BonusSend extends BaseObject {
             $allData = CalcBonusBS::find()
             ->yearMonth($this->_calcYearMonth)
             ->where(
-                'CALC_MONTH=:CALC_MONTH AND PERIOD_NUM=:PERIOD_NUM', 
+                'CALC_MONTH=:CALC_MONTH AND PERIOD_NUM=:PERIOD_NUM',
                 [
                     ':CALC_MONTH' => $this->_calcYearMonth,
                     ':PERIOD_NUM' =>$this->_periodNum
@@ -750,8 +755,8 @@ class BonusSend extends BaseObject {
     public function updateActiveUser() {
         try {
             $ret = PerfActiveUser::updateAll(
-                ['IS_SENT' => 1], 
-                'PERIOD_NUM=:PERIOD_NUM AND IS_SENT=:IS_SENT', 
+                ['IS_SENT' => 1],
+                'PERIOD_NUM=:PERIOD_NUM AND IS_SENT=:IS_SENT',
                 ['IS_SENT'=>0, 'PERIOD_NUM'=>$this->_periodNum]
             );
 
@@ -1195,4 +1200,4 @@ class BonusSend extends BaseObject {
         unset($allData);
         return true;
     }
-}
+}

+ 14 - 10
common/helpers/bonus/PerfCalc.php

@@ -190,20 +190,24 @@ class PerfCalc {
      */
     public static function _createFakeOrder($periodNum){
         echo('假假假'.$periodNum. PHP_EOL);
-        $userHaveRemain = RemainPv::findAllAsArray('REMAIN_PV >0');
+        $sysConfig = Cache::getSystemConfig();
+        $mesureUpCondition =  $sysConfig['monthPcsPvFxCondition']['VALUE']; // 月达标条件 NG默认30
+        $userHaveRemain = RemainPv::findAllAsArray('REMAIN_PV >=:MESURE_UP',[':MESURE_UP'=>$mesureUpCondition]);
         $currentPeriod = Period::getInfoByPeriodNum($periodNum);
+        $sysConfig = Cache::getSystemConfig();
+        $mesureUpCondition =  $sysConfig['monthPcsPvFxCondition']['VALUE']; // 月达标条件 NG默认30
         if($currentPeriod['IS_MONTH']){
             print_r('是月结点'.PHP_EOL);
             $periods = Period::getCurrentMonthPeriodByPeriodNum($periodNum);
             //先清除本期的假订单
             echo('首先,清除上次尝试生成业绩单时所创建的虚假订单'. date('Y-m-d  H:i:s', time()) . PHP_EOL);
             $delFOrder = Order::deleteAll(['IS_AUTO'=>'1','PERIOD_NUM'=>$periodNum]);
-            echo('检查有结余PV的用户,如果他当月PV不足30,则为其创建假订单'. PHP_EOL);
+            echo('检查有结余PV的用户,如果他当月PV不足'.$mesureUpCondition.',则为其创建假订单'. PHP_EOL);
             foreach($userHaveRemain as $uR){
                 $myPv = Order::find()->where(['PERIOD_NUM'=>$periods, 'USER_ID'=>$uR['USER_ID']])->SUM('PV');
-                if($myPv<30){
+                if($myPv < $mesureUpCondition){
                     //制造虚拟订单
-                    echo('不足30了,生成假订单' . PHP_EOL);
+                    echo('不足'.$mesureUpCondition.'了,生成假订单' . PHP_EOL);
                     $newOrderForm = new OrderForm();
                     $newOrderForm->addFakeOrder($uR['USER_ID'],$periodNum);
                 }
@@ -296,7 +300,7 @@ class PerfCalc {
             echo('本月业绩入库完成,耗时:' . round($t9 - $t7, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
             $this->_updatePercent(95);
 
-            
+
             // 通过插入到perforder中的业绩订单数据,生成此业绩期活跃用户数据
             // $this->loopWriteActiveUser();
             $this->_updatePercent(100);
@@ -440,7 +444,7 @@ class PerfCalc {
                 ->orderBy('ORDER_CREATED_AT DESC')
                 ->asArray()
                 ->all();
-               
+
                 if($allData) {
                     $this->weekMonthOrder($allData);
 
@@ -449,7 +453,7 @@ class PerfCalc {
 
                 unset($allData);
             }
-            
+
             unset($data);
             return $this->loopWriteActiveUser($offset + $this->_limit);
         }
@@ -504,7 +508,7 @@ class PerfCalc {
             }
         }
         PerfActiveUser::batchInsert($insert);
-        
+
         unset($insert);
 
         return true;
@@ -1072,7 +1076,7 @@ class PerfCalc {
                 $periodPerf = CalcCache::nowPeriodPerf($userId, $this->_periodNum);
 
                 $userBaseInfo = CalcCache::getUserInfo($userId, $this->_periodNum);
-                
+
                 $nowMonthPerf = [
                     'USER_ID' => $userId,
                     'FX_AMOUNT_CASH' => $everyData['FX_AMOUNT_CASH_SUM'],
@@ -1678,4 +1682,4 @@ class PerfCalc {
         \Yii::$app->swooleAsyncTimer->pushAsyncPercentToAdmin($percent, ['MODEL' => 'PERIOD', 'ID' => $this->_periodId, 'FIELD' => 'PERF_PERCENT']);
     }
 
-}
+}

+ 18 - 14
common/models/forms/OrderForm.php

@@ -426,8 +426,10 @@ class OrderForm extends Model
      *
      */
     private function _pvSplit($oPv){
-        if($oPv>60){
-            $currentPv = $oPv % 30 + 30;
+        $sysConfig = Cache::getSystemConfig();
+        $mesureUpCondition =  $sysConfig['monthPcsPvFxCondition']['VALUE'];
+        if($oPv>$mesureUpCondition){
+            $currentPv = $oPv % $mesureUpCondition + $mesureUpCondition;
             $remainPv = $oPv - $currentPv;
         }else{
             $currentPv = $oPv;
@@ -849,9 +851,9 @@ class OrderForm extends Model
                     throw new Exception('复消积分不足,无法购买商品');
                 }
             }
-			
-			
-			
+
+
+
 			/**
 			             * 2022-04-28
 			             * York
@@ -870,19 +872,19 @@ class OrderForm extends Model
 			                            $data->STATUS = 0;
 			                            $data->UPDATED_AT = Date::nowTime();
 			                            $data->update();
-			
+
 			                        }
 			                    }else{
 			                        throw new Exception($goods['GOODS_NAME'].'库存不足,无法购买商品');
-			
+
 			                    }
-			
-			
+
+
 			                }
 			            }
 			//                exit();
-			
-			
+
+
             //写入订单
             if (!$orderResult = $this->addUserOrder()) {
                 throw new Exception(Form::formatErrorsForApi($orderResult->getErrors()));
@@ -995,6 +997,8 @@ class OrderForm extends Model
 
     public function addFakeOrder($userId, $periodNum){
         $userName = Info::getUserNameByUserId($userId);
+        $sysConfig = Cache::getSystemConfig();
+        $mesureUpCondition =  $sysConfig['monthPcsPvFxCondition']['VALUE']; // 月达标条件 NG默认30
         $ordNo = $this->_generateSn();
         $orderModel = new Order();
         $orderModel->SN = 'OS'.$ordNo;
@@ -1002,11 +1006,11 @@ class OrderForm extends Model
         $orderModel->USER_ID = $userId;
         $orderModel->USER_NAME = $userName;
         $orderModel->PERIOD_NUM = $periodNum;
-        $orderModel->CREATE_USER = 'FAKE';
+        $orderModel->CREATE_USER = 'AUTO';
         $orderModel->ORDER_TYPE = 'FX';
         $orderModel->STATUS = 1;
-        $orderModel->PV = 30;
-        $orderModel->PAY_PV = 30;
+        $orderModel->PV = $mesureUpCondition;
+        $orderModel->PAY_PV = $mesureUpCondition;
         $orderModel->P_CALC_MONTH = '1970-01-01';
         $orderModel->CREATED_AT = Date::nowTime();
         $orderModel->EXPRESS_TYPE = 1;