Просмотр исходного кода

Merge branch 'master' into feature/dev-frontend-ui

kevin_zhangl 2 лет назад
Родитель
Сommit
e080868d9c

+ 1 - 1
backendApi/modules/v1/controllers/BonusController.php

@@ -2818,7 +2818,7 @@ class BonusController extends BaseController {
                 // 左腿1市场
                 $leftPerfUserName = (isset($memberList[1]) && $memberList[1]['USER_ID']) ? Info::getUserNameByUserId($memberList[1]['USER_ID']) : '';
                 // 右腿2市场
-                $rightPerfUserName = (isset($memberList[2]) && $memberList[1]['USER_ID']) ? Info::getUserNameByUserId($memberList[2]['USER_ID']) : '';
+                $rightPerfUserName = (isset($memberList[2]) && $memberList[2]['USER_ID']) ? Info::getUserNameByUserId($memberList[2]['USER_ID']) : '';
 
                 // 会员编号
                 $perfMarket['USER_NAME'] = $memberCode;

+ 2 - 2
backendApi/modules/v1/controllers/CalcController.php

@@ -179,7 +179,7 @@ class CalcController extends BaseController
             Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
             return static::notice('计算系统中的第' . $periodNum . '期的业绩期信息不存在');
         } else {
-            CalcRecord::record($periodNum, '已通知计算系统生成本期的期业绩');
+            CalcRecord::record($periodNum, '【期业绩】已通知计算系统生成本期的期业绩');
             \Yii::$app->$db->createCommand()->update('AR_PERIOD', ['IS_PREPARE' => 1], 'PERIOD_NUM=' . $periodNum)->execute();
             return static::notice('期业绩已于计算系统中开始计算,请等待');
         }
@@ -255,7 +255,7 @@ class CalcController extends BaseController
             Period::updateAll(['IS_CALCULATED' => 0, 'IS_CALCING' => 1], ['PERIOD_NUM' => $period['PERIOD_NUM']]);
             //设置奖金开始计算时间
             Period::updateAll(['START_EXEC_TIME' => time()], ['PERIOD_NUM' => $periodNum]);
-            CalcRecord::record($periodNum, '奖金已于计算系统中开始计算,请等待');
+            CalcRecord::record($periodNum, '【奖金计算】开始计算第'.$periodNum.'期的奖金');
             \Yii::$app->$db->createCommand()->update('AR_PERIOD', ['IS_PREPARE' => 3, 'IS_CALCULATED' => 0], 'PERIOD_NUM=' . $periodNum)->execute();
             Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
             return static::notice('本期奖金已于计算系统中开始计算,请等待');

+ 1 - 1
backendEle/src/views/bonus/period.vue

@@ -93,7 +93,7 @@
                         {{tool.formatDate(scope.row.CREATED_AT)}}
                       </template>
                     </el-table-column>
-                    <el-table-column prop="TEXT" label="日志内容" width="400"></el-table-column>
+                    <el-table-column prop="TEXT" label="日志内容" width="650"></el-table-column>
                   </el-table>
                 </div>
                 <div style="margin-left: 15px">

+ 1 - 1
backendEle/src/views/user/index.vue

@@ -488,7 +488,7 @@
                 })
                 return
             }
-            let isChartTip = isAtlas === true ? 'Display Chart' : 'Hidden Chart'//'显示图谱' : '隐藏图谱'
+            let isAtlasTip = isAtlas === true ? 'Display Chart' : 'Hidden Chart'//'显示图谱' : '隐藏图谱'
             this.$confirm(`Are you sure you want to【${isAtlasTip}】?`, 'Hint', {//`确定要对所选会员【${isAtlasTip}】吗?`, '提示'
                 confirmButtonText: 'confirm', // 确定
                 cancelButtonText: 'cancel', // 取消

+ 39 - 17
common/helpers/bonus/Calc/CalcConsole.php

@@ -62,43 +62,43 @@ class CalcConsole extends BaseBusiness
         echo $businessPeriod['IS_CALCING'];
         //同步计算进度日志到业务系统
         if (4 == $period['IS_PREPARE'] && 1 == $period['IS_CALCULATED'] && 1 == $businessPeriod['IS_CALCING']) {
-            self::syncCalcRecord($period['PERIOD_NUM'], $db, $startExecTime);
+            self::syncLogRecord($period['PERIOD_NUM'], $db, $startExecTime);
             \Yii::$app->db->createCommand()->update('AR_PERIOD', ['IS_CALCING' => 0], 'PERIOD_NUM=' . $period['PERIOD_NUM'])->execute();
         }
 
         if (2 == $period['IS_PREPARE'] && 1 == $period['IS_PERFED'] && $autoExec && !$businessIsProcessing) {
             //拉取期业绩
-            CalcRecord::record($period['PERIOD_NUM'], '第' . $period['PERIOD_NUM'] . '期的业绩数据已生成');
-            CalcRecord::record($period['PERIOD_NUM'], '开始获取第' . $period['PERIOD_NUM'] . '期的期业绩数据');
+            CalcRecord::record($period['PERIOD_NUM'], '【期业绩】第' . $period['PERIOD_NUM'] . '期的业绩数据已生成');
+            CalcRecord::record($period['PERIOD_NUM'], '【期业绩】开始获取第' . $period['PERIOD_NUM'] . '期的期业绩数据');
 
             Period::updatePeriodIsProcessing($period['PERIOD_NUM'], Period::IS_PROCESSING);
             $res = (new PullPerfDataFromCalc($period['PERIOD_NUM']))->start();
             if (200 == $res['code']) {
                 Period::updatePeriodIsProcessing($period['PERIOD_NUM'], Period::NOT_PROCESSING);
-                CalcRecord::record($period['PERIOD_NUM'], '第' . $period['PERIOD_NUM'] . '期的期业绩数据已获取');
+                CalcRecord::record($period['PERIOD_NUM'], '【期业绩】第' . $period['PERIOD_NUM'] . '期的期业绩数据已获取');
             } else {
                 //结束计算状态
                 Period::updatePeriodIsProcessing($period['PERIOD_NUM'], Period::NOT_PROCESSING);
-                CalcRecord::record($period['PERIOD_NUM'], '第' . $period['PERIOD_NUM'] . '期的期业绩数据获取失败,原因:' . $res['msg']);
+                CalcRecord::record($period['PERIOD_NUM'], '【期业绩】第' . $period['PERIOD_NUM'] . '期的期业绩数据获取失败,原因:' . $res['msg']);
                 return $res;
             }
 
             //自动执行且IS_PREPARE为3 直接开始结算流程
-            CalcRecord::record($period['PERIOD_NUM'], '开始计算第' . $period['PERIOD_NUM'] . '期的奖金');
+            CalcRecord::record($period['PERIOD_NUM'], '【奖金计算】开始计算第' . $period['PERIOD_NUM'] . '期的奖金');
             //同步周期表的值到业务系统
             self::pullPeriodForUpdate($period['PERIOD_NUM']);
             return \Yii::$app->$db->createCommand()->update('AR_PERIOD', ['IS_PREPARE' => 3], 'PERIOD_NUM=:PERIOD_NUM', ['PERIOD_NUM' => $period['PERIOD_NUM']])->execute();
         }
 
         if (4 == $period['IS_PREPARE'] && 1 == $period['IS_CALCULATED'] && $autoExec && !$businessIsProcessing && !$businessIsCalculated) {
-            CalcRecord::record($period['PERIOD_NUM'], '第' . $period['PERIOD_NUM'] . '期的奖金已计算完成');
-            CalcRecord::record($period['PERIOD_NUM'], '开始拉取第' . $period['PERIOD_NUM'] . '期的奖金数据');
+            CalcRecord::record($period['PERIOD_NUM'], '【奖金计算】第' . $period['PERIOD_NUM'] . '期的奖金已计算完成');
+            CalcRecord::record($period['PERIOD_NUM'], '【奖金计算】开始拉取第' . $period['PERIOD_NUM'] . '期的奖金数据');
 
             Period::updatePeriodIsProcessing($period['PERIOD_NUM'], Period::IS_PROCESSING);
             //自动执行且IS_CALCULATED为1 直接开始拉取结算数据
             $res = (new PullCalcBonusData($period['PERIOD_NUM']))->start();
             if (200 == $res['code']) {
-                CalcRecord::record($period['PERIOD_NUM'], '第' . $period['PERIOD_NUM'] . '期的奖金数据已全部拉取');
+                CalcRecord::record($period['PERIOD_NUM'], '【奖金计算】第' . $period['PERIOD_NUM'] . '期的奖金数据已全部拉取');
                 //待拉取完成后再将计算完成标识改为已完成
                 \Yii::$app->db->createCommand()->update('AR_PERIOD', ['IS_CALCULATED' => 1], 'PERIOD_NUM=' . $period['PERIOD_NUM'])->execute();
 
@@ -109,11 +109,11 @@ class CalcConsole extends BaseBusiness
                 //同步周期表的值到业务系统
                 self::pullPeriodForUpdate($period['PERIOD_NUM']);
                 //拉取计算系统的进度日志
-                self::syncCalcRecord($period['PERIOD_NUM'], $db, $startExecTime);
+                self::syncLogRecord($period['PERIOD_NUM'], $db, $startExecTime);
             } else {
                 //结束计算状态
                 Period::updatePeriodIsProcessing($period['PERIOD_NUM'], Period::NOT_PROCESSING);
-                CalcRecord::record($period['PERIOD_NUM'], '第' . $period['PERIOD_NUM'] . '期的奖金数据获取失败,原因:' . $res['msg']);
+                CalcRecord::record($period['PERIOD_NUM'], '【奖金计算】第' . $period['PERIOD_NUM'] . '期的奖金数据获取失败,原因:' . $res['msg']);
                 return $res;
             }
             return true;
@@ -150,10 +150,10 @@ class CalcConsole extends BaseBusiness
 
             if($formModel->load(['periodNum'=>$periodNum], '') && $formModel->autoPrePerf()) {
                 echo('自动计算已开始,请等待'.PHP_EOL);
-                CalcRecord::record($periodNum, '第' . $periodNum . '期,定时计算开始');
+                CalcRecord::record($periodNum, '【定时计算】第' . $periodNum . '期,定时计算开始');
             } else {
                 echo('自动计算未开始'.PHP_EOL);
-                CalcRecord::record($periodNum, '第' . $periodNum  . '期,定时计算未开始');
+                CalcRecord::record($periodNum, '【定时计算】第' . $periodNum  . '期,定时计算未开始');
             }
             return;
         }else{
@@ -176,6 +176,7 @@ class CalcConsole extends BaseBusiness
             return true;
         }
         $businessPeriod = Period::find()->where(['PERIOD_NUM' => $period['PERIOD_NUM']])->asArray()->one();
+        $startExecTime = $businessPeriod['START_EXEC_TIME'] ?? 0;
         if (
             $businessPeriod['SEND_STARTED_AT'] > 0 || $businessPeriod['IS_SENT'] > 0 // 已挂网
             || 1 != $businessPeriod['IS_PREPARING'] // 未在预计算中
@@ -188,8 +189,8 @@ class CalcConsole extends BaseBusiness
             && 1 == $period['IS_PERFED']
         ) {
             //拉取期业绩
-            CalcRecord::record($period['PERIOD_NUM'], '第' . $period['PERIOD_NUM'] . '期的预计算业绩数据已生成');
-            CalcRecord::record($period['PERIOD_NUM'], '开始获取第' . $period['PERIOD_NUM'] . '期的预计算期业绩数据');
+            CalcRecord::record($period['PERIOD_NUM'], '【期业绩】第' . $period['PERIOD_NUM'] . '期的预计算业绩数据已生成');
+            CalcRecord::record($period['PERIOD_NUM'], '【期业绩】开始获取第' . $period['PERIOD_NUM'] . '期的预计算期业绩数据');
 
             Period::updatePeriodIsPreparing($period['PERIOD_NUM'], Period::IS_PREPARING);
             $res = (new PullPerfDataFromCalc($period['PERIOD_NUM']))->start();
@@ -197,14 +198,15 @@ class CalcConsole extends BaseBusiness
 //                Period::updatePeriodIsProcessing($period['PERIOD_NUM'], Period::NOT_PROCESSING);
                 //设置预计算标识
                 Period::updatePeriodIsPreparing($period['PERIOD_NUM'], Period::NOT_PREPARING);
-                CalcRecord::record($period['PERIOD_NUM'], '第' . $period['PERIOD_NUM'] . '期的预计算期业绩数据已获取');
+                CalcRecord::record($period['PERIOD_NUM'], '【期业绩】第' . $period['PERIOD_NUM'] . '期的预计算期业绩数据已获取');
+                self::syncLogRecord($period['PERIOD_NUM'], $db, $startExecTime);
                 return $res;
             } else {
                 //结束计算状态
 //                Period::updatePeriodIsProcessing($period['PERIOD_NUM'], Period::NOT_PROCESSING);
                 //设置预计算标识
                 Period::updatePeriodIsPreparing($period['PERIOD_NUM'], Period::NOT_PREPARING);
-                CalcRecord::record($period['PERIOD_NUM'], '第' . $period['PERIOD_NUM'] . '期的预计算期业绩数据获取失败,原因:' . $res['msg']);
+                CalcRecord::record($period['PERIOD_NUM'], '【期业绩】第' . $period['PERIOD_NUM'] . '期的预计算期业绩数据获取失败,原因:' . $res['msg']);
                 return $res;
             }
         }
@@ -240,4 +242,24 @@ class CalcConsole extends BaseBusiness
         }
         return true;
     }
+
+    public static function syncLogRecord($periodNum, $db, $startTime = 0)
+    {
+        $calcTaskDesc = \Yii::$app->$db->createCommand("SELECT
+        ID,PERIOD_NUM,LOG_DESCRIBE,CREATE_AT FROM AR_SERVE_LOG 
+        where  PERIOD_NUM=$periodNum  AND CREATE_AT>=$startTime
+        order by RECORD_SORT")->queryAll();
+
+        $calcTaskDescKeys = array_column($calcTaskDesc, null, 'ID');
+
+        $currentRecordList    = CalcRecord::find()->where(['PERIOD_NUM' => $periodNum])->select('ID')->asArray()->column();
+        $currentRecordListKey = array_flip($currentRecordList);
+
+        $tableName = (new CalcRecord())->getTableSchema()->name;
+        $result    = array_diff_key($calcTaskDescKeys, $currentRecordListKey);
+        if (!empty($result)) {
+            return \Yii::$app->db->createCommand()->batchInsert($tableName, ['ID', 'PERIOD_NUM', 'TEXT', 'CREATED_AT'], $result)->execute();
+        }
+        return true;
+    }
 }

+ 14 - 0
common/helpers/bonus/Calc/GeneratePerfOrder.php

@@ -6,6 +6,7 @@ use common\helpers\bonus\PerfCalc;
 use common\helpers\Cache;
 use common\helpers\Date;
 use common\helpers\snowflake\SnowFake;
+use common\models\CalcRecord;
 use common\models\DecOrder;
 use common\models\forms\DeclarationForm;
 use common\models\forms\OrderForm;
@@ -93,6 +94,7 @@ class GeneratePerfOrder extends BasePerfBusiness
     {
         // 业绩单
         PerfOrder::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
+        CalcRecord::record($this->_periodNum, '【生成业绩单】业务系统,AR_PERF_ORDER表,本期数据已清空');
     }
 
     public function perfOrder(): bool
@@ -107,6 +109,7 @@ class GeneratePerfOrder extends BasePerfBusiness
     public function decOrder(): bool
     {
         $_offset = 0;
+        $countDecOrder = 0;
         decOrder:
         $allData = DecOrder::find()
             ->select('PAID_WALLET,ID,DEC_SN,ORDER_SN,USER_ID,TYPE,TO_USER_ID,IS_ADMIN,DEC_AMOUNT,DEC_PV,PERIOD_NUM,CALC_MONTH,IS_DEL,P_CALC_MONTH,CREATED_AT,DEC_ID')
@@ -175,10 +178,12 @@ class GeneratePerfOrder extends BasePerfBusiness
             }
             $data    = null;
             $_offset += 1;
+            $countDecOrder += count($insertPerfOrderData);
             $this->perfOrderInsert($insertPerfOrderData);
             $insertPerfOrderData = null;
             goto decOrder;
         }
+        CalcRecord::record($this->_periodNum,"【生成业绩单】业务系统,AR_PERF_ORDER表,插入".$countDecOrder."条DecOrder记录");
         $allData = null;
         return true;
     }
@@ -186,6 +191,7 @@ class GeneratePerfOrder extends BasePerfBusiness
     public function orderDec(): bool
     {
         $_offset = 0;
+        $countOrderDec = 0;
         orderDec:
         $allData = OrderDec::find()->select(
             'PAY_TYPE,CREATED_AT,ID,SN,USER_ID,ORDER_TYPE,ORDER_AMOUNT,PV,PAY_AMOUNT,PAY_PV,PERIOD_NUM,PAY_TYPE')
@@ -252,10 +258,12 @@ class GeneratePerfOrder extends BasePerfBusiness
             }
             $data    = null;
             $_offset += 1;
+            $countOrderDec += count($insertPerfOrderData);
             $this->perfOrderInsert($insertPerfOrderData);
             $insertPerfOrderData = null;
             goto orderDec;
         }
+        CalcRecord::record($this->_periodNum,"【生成业绩单】业务系统,AR_PERF_ORDER表,插入".$countOrderDec."条OrderDec记录");
         $allData = null;
         return true;
     }
@@ -263,6 +271,7 @@ class GeneratePerfOrder extends BasePerfBusiness
     public function order(): bool
     {
         $_offset = 0;
+        $countOrder = 0;
         order:
         $allData = Order::find()->select('ID,SN,DEC_SN,USER_ID,ORDER_TYPE,ORDER_AMOUNT,PAY_AMOUNT,PAY_PV,PAY_TYPE,PERIOD_NUM,STATUS,IS_DELETE,P_CALC_MONTH,CREATED_AT')
             ->where("PERIOD_NUM=:PERIOD_NUM AND IS_DELETE=0 AND ORDER_TYPE=:ORDER_TYPE",
@@ -337,10 +346,12 @@ class GeneratePerfOrder extends BasePerfBusiness
             }
             $data    = null;
             $_offset += 1;
+            $countOrder += count($insertPerfOrderData);
             $this->perfOrderInsert($insertPerfOrderData);
             $insertPerfOrderData = null;
             goto order;
         }
+        CalcRecord::record($this->_periodNum,"【生成业绩单】业务系统,AR_PERF_ORDER表,插入".$countOrder."条Order记录");
         $allData = null;
         return true;
     }
@@ -348,6 +359,7 @@ class GeneratePerfOrder extends BasePerfBusiness
     public function orderShop(): bool
     {
         $_offset = 0;
+        $countOrderShop = 0;
         orderShop:
         $allData = OrderShop::find()->select(
             'ID,SN,DEC_SN,USER_ID,ORDER_TYPE,ORDER_AMOUNT,PAY_AMOUNT,PAY_PV,PAY_TYPE,
@@ -425,10 +437,12 @@ class GeneratePerfOrder extends BasePerfBusiness
             }
             $data    = null;
             $_offset += 1;
+            $countOrderShop += count($insertPerfOrderData);
             $this->perfOrderInsert($insertPerfOrderData);
             $insertPerfOrderData = null;
             goto orderShop;
         }
+        CalcRecord::record($this->_periodNum,"【生成业绩单】业务系统,AR_PERF_ORDER表,插入".$countOrderShop."条OrderShop记录");
         $allData = null;
         return true;
     }

+ 24 - 1
common/helpers/bonus/Calc/PullCalcBonusData.php

@@ -81,6 +81,7 @@ class PullCalcBonusData extends BaseBusiness
 
                 if ('same' == $info['type']) {
                     $_offset = 0;
+                    $countSameBonus = 0;
                     sameBonus:
                     $offset = $_offset * $this->_limit;
                     if (isset($info['condition_type']) && $info['condition_type'] == 'id' && isset($info['param_name'])) {
@@ -94,26 +95,31 @@ class PullCalcBonusData extends BaseBusiness
                     if (!empty($data)) {
                         $fieldArray = array_keys($data[0]);
                         $_offset    += 1;
+                        $countSameBonus += count($data);
                         \Yii::$app->db->createCommand()->batchInsert($table, $fieldArray, $data)->execute();
                         $data = null;
                         goto sameBonus;
                     }
+                    CalcRecord::record($this->_periodNum, "【奖金计算】业务系统,".$table."表,插入".$countSameBonus."条记录");
                     $data = null;
                     continue;
                 }
 
                 if ('calc_month' == $info['type']) {
                     $_offset = 0;
+                    $countCalcMonth = 0;
                     calcMonth:
                     $offset = $_offset * $this->_limit;
                     $data   = \Yii::$app->$db->createCommand("SELECT *,FROM_UNIXTIME(CREATED_AT,'%Y-%m-%d') as P_CALC_MONTH from $table where PERIOD_NUM = $this->_periodNum limit $this->_limit offset $offset;")->queryAll();
                     if (!empty($data)) {
                         $fieldArray = array_keys($data[0]);
                         $_offset    += 1;
+                        $countCalcMonth += count($data);
                         \Yii::$app->db->createCommand()->batchInsert($table, $fieldArray, $data)->execute();
                         $data = null;
                         goto calcMonth;
                     }
+                    CalcRecord::record($this->_periodNum, "【奖金计算】业务系统,".$table."表,插入".$countCalcMonth."条记录");
                     $data = null;
                     continue;
                 }
@@ -160,6 +166,7 @@ class PullCalcBonusData extends BaseBusiness
         $calculatedAt = $calcPeriod['CALCULATED_AT'];
 
         $_offset      = 0;
+        $countCalcBonus = 0;
         $this->_limit = 2000;
         calcBonus:
 
@@ -175,6 +182,7 @@ class PullCalcBonusData extends BaseBusiness
 
         if (!empty($data)) {
             $_offset += 1;
+            $countCalcBonus += count($data);
             $data    = array_column($data, null, 'USER_ID');
             $userIds = array_keys($data);
             //获取用户信息相关的数据 在下方循环内以名为$user的变量整合
@@ -209,6 +217,7 @@ class PullCalcBonusData extends BaseBusiness
             $data     = null;
             goto calcBonus;
         }
+        CalcRecord::record($this->_periodNum, "【奖金计算】业务系统,".$table."表,插入".$countCalcBonus."条记录");
         $data = null;
         return true;
 
@@ -290,34 +299,45 @@ class PullCalcBonusData extends BaseBusiness
     {
         // 奖金表
         CalcBonus::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
+        CalcRecord::record($this->_periodNum, "【奖金计算】业务系统,AR_CALC_BONUS表,当期数据已清空");
         CalcBonusBS::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
+        CalcRecord::record($this->_periodNum, "【奖金计算】业务系统,AR_CALC_BONUS_BS表,当期数据已清空");
         CalcBonusQuarter::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
+        CalcRecord::record($this->_periodNum, "【奖金计算】业务系统,AR_CALC_BONUS_QUARTER表,当期数据已清空");
 
         CalcBonusBD::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
+        CalcRecord::record($this->_periodNum, "【奖金计算】业务系统,AR_CALC_BONUS_BD表,当期数据已清空");
         CalcBonusQY::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
+        CalcRecord::record($this->_periodNum, "【奖金计算】业务系统,AR_CALC_BONUS_QY表,当期数据已清空");
         CalcBonusTG::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
+        CalcRecord::record($this->_periodNum, "【奖金计算】业务系统,AR_CALC_BONUS_TG表,当期数据已清空");
 //        CalcBonusYJ::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
 //        CalcBonusGX::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
 //        CalcBonusGL::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
 
         //AR_BS_BONUS_103_CALC_EVENT 因每期的主键id相同,故需每次拉取前清理
         \Yii::$app->db->createCommand("TRUNCATE TABLE AR_BS_BONUS_103_CALC_EVENT")->execute();
+        CalcRecord::record($this->_periodNum, "【奖金计算】业务系统,AR_BS_BONUS_103_CALC_EVENT表,已清空");
         //AR_QTR_CALC_RECORD 因每期的主键id相同,故需每次拉取前清理
         \Yii::$app->db->createCommand("TRUNCATE TABLE AR_QTR_CALC_RECORD")->execute();
+        CalcRecord::record($this->_periodNum, "【奖金计算】业务系统,AR_QTR_CALC_RECORD表,已清空");
 
         foreach (self::BASE_INFO_METHODS as $info) {
             if ('same' == $info['type'] && isset($info['general_clear']) && $info['general_clear']) {
                 if (isset($info['condition_type']) && $info['condition_type'] == 'id' && isset($info['param_name'])) {
                     $param = $info['param_name'];
                     $res   = self::pageDeleteAll($info['table'], $info['condition_field'] . '=' . $this->$param);
+                    CalcRecord::record($this->_periodNum, "【奖金计算】业务系统,".$info['table']."表,已清除当期数据");
                 } else if (isset($info['condition_type']) && $info['condition_type'] == 'custom' && $info['condition'] == 'group') {
                     $res = self::pageDeleteAll($info['table'], "CALC_MONTH = $this->_calcMonth and CALC_YEAR=$this->_calcYear");
+                    CalcRecord::record($this->_periodNum, "【奖金计算】业务系统,".$info['table']."表,已清除当月数据");
                 } else {
                     $res = self::pageDeleteAll($info['table'], 'PERIOD_NUM=' . $this->_periodNum);
+                    CalcRecord::record($this->_periodNum, "【奖金计算】业务系统,".$info['table']."表,已清除当期数据");
                 }
 
                 if (!$res) {
-                    CalcRecord::record($this->_periodNum, '第' . $this->_periodNum . '期的' . $info['table'] . '表清理失败');
+                    CalcRecord::record($this->_periodNum, '【奖金计算】业务系统,第' . $this->_periodNum . '期的' . $info['table'] . '表清理失败');
                 }
             }
         }
@@ -329,8 +349,11 @@ class PullCalcBonusData extends BaseBusiness
 //            CalcBonusStandard::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
 //            ScoreMonth::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
             CalcBonusTourism::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
+            CalcRecord::record($this->_periodNum, "【奖金计算】业务系统,是月结点,AR_CALC_BONUS_TOURISM表,已清除当月数据");
             CalcBonusGarage::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
+            CalcRecord::record($this->_periodNum, "【奖金计算】业务系统,是月结点,AR_CALC_BONUS_GARAGE表,已清除当月数据");
             CalcBonusVilla::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
+            CalcRecord::record($this->_periodNum, "【奖金计算】业务系统,是月结点,AR_CALC_BONUS_VILLA表,已清除当月数据");
         }
     }
 

+ 9 - 0
common/helpers/bonus/Calc/PullPerfDataFromCalc.php

@@ -3,6 +3,7 @@
 namespace common\helpers\bonus\Calc;
 
 use common\helpers\Date;
+use common\models\CalcRecord;
 use common\models\PerfMonth;
 use common\models\PerfPeriod;
 use common\models\PerfStandard;
@@ -63,6 +64,7 @@ class PullPerfDataFromCalc extends BasePerfBusiness
     {
         // 周业绩
         PerfPeriod::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
+        CalcRecord::record($this->_periodNum, "【期业绩】业务系统,AR_PERF_PERIOD表,已清除当期所有记录");
         // 业绩单
 //        PerfOrder::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
         // 删除活跃用户
@@ -71,6 +73,7 @@ class PullPerfDataFromCalc extends BasePerfBusiness
         if ($this->_isCalcMonth) {
             // 月业绩表
             PerfMonth::pageDeleteAll("CALC_MONTH='{$this->_calcYearMonth}'");
+            CalcRecord::record($this->_periodNum, "【期业绩】业务系统,是月结点,AR_PERF_MONTH表,已清除当月所有记录");
             //达标业绩表
 //            PerfStandard::pageDeleteAll("CALC_MONTH='{$this->_calcYearMonth}'");
         }
@@ -80,6 +83,7 @@ class PullPerfDataFromCalc extends BasePerfBusiness
     {
         $db      = $this->_calc_db_name;
         $_offset = 0;
+        $countPerfMonth = 0;
 
         //        $pCalcMonth = date('Y-m-d', strtotime($formatOrderData['CREATED_AT']));
         $pCalcMonth = Date::ociToDate($this->_calcYearMonth, Date::OCI_TIME_FORMAT_SHORT_MONTH);
@@ -94,10 +98,12 @@ class PullPerfDataFromCalc extends BasePerfBusiness
         if (!empty($data)) {
             $fieldArray = array_keys($data[0]);
             $_offset    += 1;
+            $countPerfMonth += count($data);
             \Yii::$app->db->createCommand()->batchInsert('AR_PERF_MONTH', $fieldArray, $data)->execute();
             $data = null;
             goto periodMonth;
         }
+        CalcRecord::record($this->_periodNum,"【生成业绩单】业务系统,AR_PERF_MONTH表,插入".$countPerfMonth."条记录");
         $data = null;
 
         return true;
@@ -107,6 +113,7 @@ class PullPerfDataFromCalc extends BasePerfBusiness
     {
         $db      = $this->_calc_db_name;
         $_offset = 0;
+        $countPerfPeriod = 0;
 
         //        $pCalcMonth = date('Y-m-d', strtotime($formatOrderData['CREATED_AT']));
         $pCalcMonth = Date::ociToDate($this->_calcYearMonth, Date::OCI_TIME_FORMAT_SHORT_MONTH);
@@ -121,10 +128,12 @@ class PullPerfDataFromCalc extends BasePerfBusiness
         if (!empty($data)) {
             $fieldArray = array_keys($data[0]);
             $_offset    += 1;
+            $countPerfPeriod += count($data);
             \Yii::$app->db->createCommand()->batchInsert('AR_PERF_PERIOD', $fieldArray, $data)->execute();
             $data = null;
             goto period;
         }
+        CalcRecord::record($this->_periodNum,"【生成业绩单】业务系统,AR_PERF_PERIOD表,插入".$countPerfPeriod."条记录");
         $data = null;
 
         return true;

+ 16 - 2
common/helpers/bonus/Calc/PushBaseDataToCalc.php

@@ -12,6 +12,7 @@ use common\components\ActiveRecord;
 use common\models\CalcBonus;
 use common\models\CalcBonusBS;
 use common\models\CalcBonusQY;
+use common\models\CalcRecord;
 use common\models\EmployLevel;
 use common\models\forms\DeclarationForm;
 use common\models\PerfMonth;
@@ -335,6 +336,7 @@ class PushBaseDataToCalc extends BaseBusiness
     {
         // 周业绩
         PerfPeriod::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
+        CalcRecord::record($this->_periodNum, "【基础数据】业务系统,AR_PERF_PERIOD表,已清除当期所有记录");
         // 业绩单
 //        PerfOrder::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
         // 删除活跃用户
@@ -343,8 +345,10 @@ class PushBaseDataToCalc extends BaseBusiness
         if ($this->_isCalcMonth) {
             // 月业绩表
             PerfMonth::pageDeleteAll("CALC_MONTH='{$this->_calcYearMonth}'");
+            CalcRecord::record($this->_periodNum, "【基础数据】业务系统,是月结点,AR_PERF_MONTH表,已清除当月所有记录");
             //达标业绩表
             PerfStandard::pageDeleteAll("CALC_MONTH='{$this->_calcYearMonth}'");
+            CalcRecord::record($this->_periodNum, "【基础数据】业务系统,是月结点,AR_PERF_STANDARD表,已清除当月所有记录");
         }
     }
 
@@ -359,6 +363,7 @@ class PushBaseDataToCalc extends BaseBusiness
         foreach (self::BASE_INFO_METHODS as $method => $val) {
             if (\Yii::$app->$db->createCommand("TRUNCATE TABLE {$val['table']}")->execute() !== false) {
                 $res[] = $val['table'];
+                CalcRecord::record($this->_periodNum, "【基础数据】计算服务系统,".$val['table']."表,已清空");
             }
         }
         return $res;
@@ -389,6 +394,7 @@ class PushBaseDataToCalc extends BaseBusiness
                     if (!empty($data)) {
                         $_offset += 1;
                         \Yii::$app->$db->createCommand()->batchInsert($table, $fieldArray, $data)->execute();
+                        CalcRecord::record($this->_periodNum, "【基础数据】计算服务系统,".$table."表,插入".count($data)."条记录");
                         $data = null;
                         goto A;
                     }
@@ -420,6 +426,7 @@ class PushBaseDataToCalc extends BaseBusiness
             ->asArray()->all();
         if (!empty($data)) {
             \Yii::$app->$db->createCommand()->batchInsert($table, $fieldArray, $data)->execute();
+            CalcRecord::record($this->_periodNum, "【基础数据】计算服务系统,".$table."表,插入 ".count($data)."条记录");
         }
         return true;
     }
@@ -492,6 +499,7 @@ class PushBaseDataToCalc extends BaseBusiness
         $data  = CalcBonusQY::find()->select($field)->where(['PERIOD_NUM' => $periodNum])->asArray()->all();
 
         \Yii::$app->$db->createCommand()->batchInsert($table, $fieldArray, $data)->execute();
+        CalcRecord::record($this->_periodNum, "【基础数据】计算服务系统,".$table."表,插入 ".count($data)."条记录");
         $data = null;
         return true;
     }
@@ -506,7 +514,7 @@ class PushBaseDataToCalc extends BaseBusiness
             ->all();
         if (!empty($data)) {
             \Yii::$app->$db->createCommand()->batchInsert($table, $fieldArray, $data)->execute();
-
+            CalcRecord::record($this->_periodNum, "【基础数据】计算服务系统,".$table."表,插入 ".count($data)."条记录");
         }
         $data = null;
         return true;
@@ -525,6 +533,7 @@ class PushBaseDataToCalc extends BaseBusiness
             ->all();
         if (!empty($data)) {
             \Yii::$app->$db->createCommand()->batchInsert($table, $fieldArray, $data)->execute();
+            CalcRecord::record($this->_periodNum, "【基础数据】计算服务系统,".$table."表,插入 ".count($data)."条记录");
         }
         $data = null;
         return true;
@@ -533,7 +542,7 @@ class PushBaseDataToCalc extends BaseBusiness
     public function perfOrder($table, $fieldArray, $db): bool
     {
         $_offset = 0;
-
+        $countPerfOrder = 0;
         $field = "ID,SN,DEC_TYPE, USER_ID,PV,
          PERIOD_NUM, CALC_MONTH,DEC_USER_ID,
          CREATED_AT,DEC_AMOUNT as ORDER_AMOUNT,PAY_TYPE,FROM_TABLES,PAY_TYPE";
@@ -553,11 +562,13 @@ class PushBaseDataToCalc extends BaseBusiness
 
         if (!empty($data)) {
             $_offset    += 1;
+            $countPerfOrder += count($data);
             $fieldArray = array_keys(current($data));
             \Yii::$app->$db->createCommand()->batchInsert($table, $fieldArray, $data)->execute();
             $data = null;
             goto perfOrder;
         }
+        CalcRecord::record($this->_periodNum, "【基础数据】计算服务系统,".$table."表,插入 ".$countPerfOrder."条记录");
         $data = null;
         return true;
     }
@@ -643,6 +654,7 @@ class PushBaseDataToCalc extends BaseBusiness
             return true;
         }
         $_offset = 0;
+        $countPerfMonth = 0;
         $field   = implode(',', $fieldArray);
 
         $months = $this->getMonthsByPeriodNum($this->_periodNum);
@@ -655,11 +667,13 @@ class PushBaseDataToCalc extends BaseBusiness
 
         if (!empty($data)) {
             $_offset    += 1;
+            $countPerfMonth += count($data);
             $fieldArray = array_keys(current($data));
             \Yii::$app->$db->createCommand()->batchInsert($table, $fieldArray, $data)->execute();
             $data = null;
             goto perfMonth;
         }
+        CalcRecord::record($this->_periodNum, "【基础数据】计算服务系统,".$table."表,插入 ".$countPerfMonth."条记录");
         $data = null;
         return true;
     }

+ 1 - 0
common/models/EmployLevel.php

@@ -37,6 +37,7 @@ use yii\helpers\Json;
  * @property int $ACHIEVE_MEMBER_NUM 推荐会员达标数
  * @property string $ACHIEVE_PV 邀请会员数不足时达标业绩PV
  * @property string $ACHIEVE_PERF_PV 邀请会员数满足时达标业绩PV
+ * @property string $BS_PERCENT 蓝星奖比例
  */
 class EmployLevel extends \common\components\ActiveRecord
 {

+ 6 - 0
common/models/forms/ApproachDeclarationLoopForm.php

@@ -120,6 +120,9 @@ class ApproachDeclarationLoopForm extends Model
                 // 套餐报单
                 if (isset($value['packageId']) && $value['packageId']){
                     $packagedata = DeclarationPackage::findOneAsArray('ID=:ID', [':ID' => $value['packageId']]);
+                    if (!$packagedata) {
+                        throw new Exception('Products does not exists!');
+                    }
                     if($packagedata['STORE_NUMS']>0){
                         $data =  DeclarationPackage::find()->where(['ID'=> $packagedata['ID'] ])->one();
                         $goods_store_nums = $data->STORE_NUMS - 1;
@@ -139,6 +142,9 @@ class ApproachDeclarationLoopForm extends Model
                 if (count($value['goodsId']) > 0 && (count($value['goodsId']) == count($value['goodsNum']))) {
                     for ($i = 0; $i < count($value['goodsId']) ;$i++) {
                         $goods = ShopGoods::findOneAsArray('ID=:ID',[':ID'=> $value['goodsId'][$i]]);
+                        if (!$goods) {
+                            throw new Exception('Products does not exists!');
+                        }
                         if ($goods['STATUS'] == 1 ){
                             if($goods['STORE_NUMS'] >= $value['goodsNum'][$i]) {
                                 // 减库存

+ 3 - 0
common/models/forms/ApproachDeclarationUpgradeForm.php

@@ -159,6 +159,9 @@ class ApproachDeclarationUpgradeForm extends Model
                 foreach ($this->goodsNum as $k => $v) {
                     if ($v) {
                         $goods = ShopGoods::findOneAsArray('ID=:ID AND STATUS=1',[':ID'=> $ids[$k]]);
+                        if (!$goods) {
+                            throw new Exception('Products does not exists!');
+                        }
                         if($goods['STORE_NUMS']>0){
                             $totalAmount += $goods['SELL_PRICE'] * intval($v);
                             $totalAmountStandard += $goods['SELL_PRICE_STANDARD'] * intval($v);

+ 9 - 2
common/models/forms/ApproachOrderForm.php

@@ -184,7 +184,7 @@ class ApproachOrderForm extends Model
      */
     public function validatePassword($attribute, $params) {
         if (!User::validatePayPassword(\Yii::$app->user->id, $this->payPassword)) {
-            $this->addError($attribute, '支付密码不正确');
+            $this->addError($attribute, 'The payment password is incorrect');//支付密码不正确
         }
     }
 
@@ -201,8 +201,12 @@ class ApproachOrderForm extends Model
 
         // 一个订单只能包含一类商品
         $goods = ShopGoods::find()->select('ID,CATEGORY_TYPE')->where(['in', 'ID', $this->goodsId])->andWhere(['STATUS' => 1])->asArray()->all();
+        if (!$goods) {
+            $this->addError($attribute, 'Products does not exists!');
+            return;
+        }
         $goodsCategoryType = array_unique(array_column($goods, 'CATEGORY_TYPE'));
-        if (count($goodsCategoryType) != 1) {
+        if (count($goodsCategoryType) > 1) {
             $this->addError($attribute, 'Order cannot contain multiple product categories');//订单不能包含多种商品分类
             return;
         }
@@ -411,6 +415,9 @@ class ApproachOrderForm extends Model
         foreach ($this->goodsNum as $k => $v) {
             if ($v) {
                 $goods = ShopGoods::findOneAsArray('ID=:ID AND STATUS=1',[':ID'=> $ids[$k]]);
+                if (!$goods) {
+                    throw new Exception('Products does not exists!');
+                }
                 if($goods['STORE_NUMS']>0){
                     if ($goods['TYPE'] == 1 || $goods['TYPE'] == 2) {
                         $discount = $goodsType[$goods['TYPE']]['discount'];

+ 6 - 0
common/models/forms/BaApproachDeclarationLoopForm.php

@@ -119,6 +119,9 @@ class BaApproachDeclarationLoopForm extends Model
                 // 套餐报单
                 if (isset($value['packageId']) && $value['packageId']){
                     $packagedata = DeclarationPackage::findOneAsArray('ID=:ID', [':ID' => $value['packageId']]);
+                    if (!$packagedata) {
+                        throw new Exception('Products does not exists!');
+                    }
                     if($packagedata['STORE_NUMS']>0){
                         $data =  DeclarationPackage::find()->where(['ID'=> $packagedata['ID'] ])->one();
                         $goods_store_nums = $data->STORE_NUMS - 1;
@@ -138,6 +141,9 @@ class BaApproachDeclarationLoopForm extends Model
                 if (count($value['goodsId']) > 0 && (count($value['goodsId']) == count($value['goodsNum']))) {
                     for ($i = 0; $i < count($value['goodsId']) ;$i++) {
                         $goods = ShopGoods::findOneAsArray('ID=:ID',[':ID'=> $value['goodsId'][$i]]);
+                        if (!$goods) {
+                            throw new Exception('Products does not exists!');
+                        }
                         if ($goods['STATUS'] == 1 ){
                             if($goods['STORE_NUMS'] >= $value['goodsNum'][$i]) {
                                 // 减库存

+ 4 - 0
common/models/forms/BaApproachOrderForm.php

@@ -338,6 +338,7 @@ class BaApproachOrderForm extends Model
 
     /**
      * 复销
+     * @throws Exception
      */
     public function add()
     {
@@ -353,6 +354,9 @@ class BaApproachOrderForm extends Model
         foreach ($this->goodsNum as $k => $v) {
             if ($v) {
                 $goods = ShopGoods::findOneAsArray('ID = :ID AND STATUS = 1', [':ID' => $ids[$k]]);
+                if (!$goods) {
+                    throw new Exception('Products does not exists!');
+                }
                 if ($goods['STORE_NUMS'] > 0) {
                     if ($goods['TYPE'] == 1 || $goods['TYPE'] == 2) {
                         $discount = $goodsType[$goods['TYPE']]['discount'];

+ 3 - 0
common/models/forms/BaDeclarationLoopForm.php

@@ -118,6 +118,9 @@ class BaDeclarationLoopForm extends Model
                 if (count($value['goodsId']) > 0 && (count($value['goodsId']) == count($value['goodsNum']))){
                     for ($i=0;$i<count($value['goodsId']);$i++){
                         $goods = ShopGoods::findOneAsArray('ID=:ID',[':ID'=> $value['goodsId'][$i]]);
+                        if (!$goods) {
+                            throw new Exception('Products does not exists!');
+                        }
                         if ($goods['STATUS'] == 1 ){
                             if($goods['STORE_NUMS'] >= $value['goodsNum'][$i]){
                                 $data = ShopGoods::find()->where(['ID' => $value['goodsId'][$i]])->one();

+ 6 - 0
common/models/forms/DeclarationLoopForm.php

@@ -125,6 +125,9 @@ class DeclarationLoopForm extends Model
                 if (isset($value['packageId']) && $value['packageId']){
 
                     $packagedata = DeclarationPackage::findOneAsArray('ID=:ID', [':ID' => $value['packageId']]);
+                    if (!$packagedata) {
+                        throw new Exception('Products does not exists!');
+                    }
                     //var_dump($packagedata['ID']);
                     if($packagedata['STORE_NUMS']<=0){
                         throw new Exception($packagedata['PACKAGE_NAME'].'Insufficient inventory');// 库存不足
@@ -134,6 +137,9 @@ class DeclarationLoopForm extends Model
                 if (count($value['goodsId']) > 0 && (count($value['goodsId']) == count($value['goodsNum']))){
                     for ($i=0;$i<count($value['goodsId']);$i++){
                         $goods = ShopGoods::findOneAsArray('ID=:ID',[':ID'=> $value['goodsId'][$i]]);
+                        if (!$goods) {
+                            throw new Exception('Products does not exists!');
+                        }
                         if ($goods['STATUS'] == 1 ){
                             if($goods['STORE_NUMS'] < $value['goodsNum'][$i]){
                                 throw new Exception($goods['GOODS_NAME'].'Insufficient inventory');// 商品库存不足

+ 3 - 0
common/models/forms/DeclarationUpgradeForm.php

@@ -157,6 +157,9 @@ class DeclarationUpgradeForm extends Model
                 foreach ($this->goodsNum as $k => $v) {
                     if ($v) {
                         $goods = ShopGoods::findOneAsArray('ID=:ID AND STATUS=1',[':ID'=> $ids[$k]]);
+                        if (!$goods) {
+                            throw new Exception('Products does not exists!');
+                        }
                         if($goods['STORE_NUMS']>0){
                             $totalAmount += $goods['SELL_PRICE'] * intval($v);
                             $totalAmountStandard += $goods['SELL_PRICE_STANDARD'] * intval($v);

+ 3 - 0
common/models/forms/EmployLevelForm.php

@@ -134,6 +134,9 @@ class EmployLevelForm extends Model {
                     $empLevelModel->RX_PERCENT = $value['RX_PERCENT'];
                     $empLevelModel->LEVEL_SCORE = $value['LEVEL_SCORE'];
                     $empLevelModel->UPGRADE_SCORE = $value['UPGRADE_SCORE'];
+                    $empLevelModel->BS_PERCENT = $value['BS_PERCENT'];   // 蓝星奖比例
+                    $empLevelModel->GARAGE_PERCENT = $value['GARAGE_PERCENT'];  // 车奖比例
+                    $empLevelModel->TOURISM_PERCENT = $value['TOURISM_PERCENT'];  // 旅游奖比例
                     if (!$empLevelModel->save()) {
                         throw new \Exception(Form::formatErrorsForApi($empLevelModel->getErrors()));
                     }

+ 19 - 2
common/models/forms/OrderForm.php

@@ -215,6 +215,7 @@ class OrderForm extends Model
     /**
      * 判断支付方式
      * @param $attribute
+     * @throws Exception
      */
     public function isPayType($attribute){
         if(!array_key_exists($this->payType, ShopGoods::payTypes())){
@@ -224,9 +225,13 @@ class OrderForm extends Model
 
         // 一个订单只能包含一类商品
         $goods = ShopGoods::find()->select('ID,CATEGORY_TYPE')->where(['in', 'ID', $this->goodsId])->andWhere(['STATUS' => 1])->asArray()->all();
+        if (!$goods) {
+            throw new Exception('Products does not exists!');
+            return;
+        }
         $goodsCategoryType = array_unique(array_column($goods, 'CATEGORY_TYPE'));
-        if (count($goodsCategoryType) != 1) {
-            $this->addError($attribute, '订单不能包含多种商品分类');
+        if (count($goodsCategoryType) > 1) {
+            $this->addError($attribute, 'Order cannot contain multiple product categories'); // 订单不能包含多种商品分类
             return;
         }
 
@@ -461,6 +466,9 @@ class OrderForm extends Model
         foreach ($this->goodsNum as $k => $v) {
             if ($v) {
                 $goods = ShopGoods::findOneAsArray('ID=:ID AND STATUS=1',[':ID'=> $ids[$k]]);
+                if (!$goods) {
+                    throw new Exception('Products does not exists!');
+                }
                 if($goods['STORE_NUMS']>0){
                     if ($goods['TYPE'] == 1 || $goods['TYPE'] == 2) {
                         $discount = $goodsType[$goods['TYPE']]['discount'];
@@ -560,6 +568,9 @@ class OrderForm extends Model
             foreach ($this->goodsNum as $k => $v){
                 if ($v){
                     $goods = ShopGoods::findOneAsArray('ID=:ID AND STATUS=1',[':ID'=> $ids[$k]]);
+                    if (!$goods) {
+                        throw new Exception('Products does not exists!');
+                    }
                     if ($goods['STORE_NUMS'] >= $this->goodsNum[$k]){
                         $data = ShopGoods::find()->where(['ID' => $ids[$k]])->one();
                         $goods_store_nums = $data->STORE_NUMS - $this->goodsNum[$k];
@@ -793,6 +804,9 @@ class OrderForm extends Model
         foreach ($this->goodsNum as $k => $v) {
             if ($v) {
                 $goods = ShopGoods::findOneAsArray('ID=:ID AND STATUS=1',[':ID'=> $ids[$k]]);
+                if (!$goods) {
+                    throw new Exception('Products does not exists!');
+                }
                 if($goods['STORE_NUMS']>0){
                     if ($goods['TYPE'] == 1 || $goods['TYPE'] == 2) {
                         $discount = $goodsType[$goods['TYPE']]['discount'];
@@ -862,6 +876,9 @@ class OrderForm extends Model
 			            foreach ($this->goodsNum as $k => $v){
 			                if ($v){
 			                    $goods = ShopGoods::findOneAsArray('ID=:ID AND STATUS=1',[':ID'=> $ids[$k]]);
+                                if (!$goods) {
+                                    throw new Exception('Products does not exists!');
+                                }
 			                    if ($goods['STORE_NUMS'] >= $this->goodsNum[$k]){
 			                        $data = ShopGoods::find()->where(['ID' => $ids[$k]])->one();
 			                        $goods_store_nums = $data->STORE_NUMS - $this->goodsNum[$k];

+ 1 - 1
common/models/forms/WithdrawForm.php

@@ -196,7 +196,7 @@ class WithdrawForm extends Model {
      */
     public function validatePassword($attribute, $params) {
         if (!User::validatePayPassword($this->_userId, $this->payPassword)) {
-            $this->addError($attribute, '支付密码不正确');
+            $this->addError($attribute, 'The payment password is incorrect');//支付密码不正确
         }
     }
 

+ 26 - 26
console/controllers/CalcController.php

@@ -25,18 +25,18 @@ class CalcController extends BaseController
     {
         $params    = Cache::getAsyncParams($taskKey);
         $periodNum = $params['periodNum'] ?? 0;
-        CalcRecord::record($periodNum, '业绩单生成中');
+        CalcRecord::record($periodNum, '【生成业绩单】业务系统,业绩单生成中');
         //生成业绩单 状态已修改
         $res = (new GeneratePerfOrder($periodNum))->start();
         //该期状态改为不在计算中
 //        Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
 
         if (200 == $res['code']) {
-            self::recordCalcAndProcessStatus($periodNum, '业绩单已生成');
+            self::recordCalcAndProcessStatus($periodNum, '【生成业绩单】业务系统,业绩单已生成');
             \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "第{$params['periodNum']}期生成业绩单更新成功");
             return true;
         } else {
-            self::recordCalcAndProcessStatus($periodNum, '业绩单生成失败,原因:' . substr($res['msg'],0,1000) ?? '');
+            self::recordCalcAndProcessStatus($periodNum, '【生成业绩单】业务系统,业绩单生成失败,原因:' . substr($res['msg'],0,1000) ?? '');
             \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "第{$params['periodNum']}期生成业绩单更新失败,原因:" . $res['msg'] ?? '', false);
             return false;
         }
@@ -48,7 +48,7 @@ class CalcController extends BaseController
         $params    = Cache::getAsyncParams($taskKey);
         $periodNum = $params['periodNum'] ?? 0;
         //生成业绩单 状态已修改
-        CalcRecord::record($periodNum, '开始生成业绩单');
+        CalcRecord::record($periodNum, '【生成业绩单】业务系统,开始生成业绩单');
         //重置业务系统的计算进度标识
         \Yii::$app->db->createCommand()->update('AR_PERIOD', ['IS_PERFED' => 0, 'IS_CALCULATED' => 0], 'PERIOD_NUM=' . $periodNum)->execute();
         //重置计算系统的计算进度标识
@@ -57,28 +57,28 @@ class CalcController extends BaseController
 
         $res = (new GeneratePerfOrder($periodNum))->start();
         if (200 == $res['code']) {
-            CalcRecord::record($periodNum, '业绩单已生成');
+            CalcRecord::record($periodNum, '【生成业绩单】业务系统,业绩单已生成');
         } else {
             Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
-            CalcRecord::record($periodNum, '第' . $periodNum . '期业绩单生成失败,原因:' . substr($res['msg'],0,100));
+            CalcRecord::record($periodNum, '【生成业绩单】业务系统,第' . $periodNum . '期业绩单生成失败,原因:' . substr($res['msg'],0,100));
             return false;
         }
 
         //推送基础数据
-        CalcRecord::record($periodNum, '开始推送基础数据');
+        CalcRecord::record($periodNum, '【基础数据】开始推送基础数据');
         $res = (new PushBaseDataToCalc($periodNum))->start();
         if (200 == $res['code']) {
             Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
-            CalcRecord::record($periodNum, '基础数据完成推送');
+            CalcRecord::record($periodNum, '【基础数据】基础数据完成推送');
         } else {
             Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
-            CalcRecord::record($periodNum, '第' . $periodNum . '期基础数据推送失败,原因:' . $res['msg']);
+            CalcRecord::record($periodNum, '【基础数据】第' . $periodNum . '期基础数据推送失败,原因:' . $res['msg']);
             return false;
         }
         //todo 完成需要修改状态
 
         //通知结算系统生成期业绩
-        CalcRecord::record($periodNum, '开始生成' . $periodNum . '期的期业绩');
+        CalcRecord::record($periodNum, '【基础数据】开始生成' . $periodNum . '期的期业绩');
         \Yii::$app->$db->createCommand()->update('AR_PERIOD', ['IS_PREPARE' => 1], 'PERIOD_NUM=' . $periodNum)->execute();
         //todo 完成需要修改状态
 
@@ -98,7 +98,7 @@ class CalcController extends BaseController
         $params    = Cache::getAsyncParams($taskKey);
         $periodNum = $params['periodNum'] ?? 0;
         //生成业绩单 状态已修改
-        CalcRecord::record($periodNum, '开始生成业绩单');
+        CalcRecord::record($periodNum, '【生成业绩单】开始生成业绩单');
         //重置业务系统的计算进度标识
         \Yii::$app->db->createCommand()->update('AR_PERIOD', ['IS_PERFED' => 0, 'IS_CALCULATED' => 0], 'PERIOD_NUM=' . $periodNum)->execute();
         //重置计算系统的计算进度标识
@@ -107,27 +107,27 @@ class CalcController extends BaseController
 
         $res = (new GeneratePerfOrder($periodNum))->start();
         if (200 == $res['code']) {
-            CalcRecord::record($periodNum, '业绩单已生成');
+            CalcRecord::record($periodNum, '【生成业绩单】业绩单已生成');
         } else {
             Period::updatePeriodIsPreparing($periodNum, Period::NOT_PREPARING);
-            CalcRecord::record($periodNum, '第' . $periodNum . '期业绩单生成失败,原因:' . substr($res['msg'],0,100));
+            CalcRecord::record($periodNum, '【生成业绩单】第' . $periodNum . '期业绩单生成失败,原因:' . substr($res['msg'],0,100));
             return false;
         }
 
         //推送基础数据
-        CalcRecord::record($periodNum, '开始推送基础数据');
+        CalcRecord::record($periodNum, '【基础数据】开始推送基础数据');
         $res = (new PushBaseDataToCalc($periodNum))->start();
         if (200 == $res['code']) {
-            CalcRecord::record($periodNum, '基础数据完成推送');
+            CalcRecord::record($periodNum, '【基础数据】基础数据完成推送');
         } else {
             Period::updatePeriodIsPreparing($periodNum, Period::NOT_PREPARING);
-            CalcRecord::record($periodNum, '第' . $periodNum . '期基础数据推送失败,原因:' . $res['msg']);
+            CalcRecord::record($periodNum, '【基础数据】第' . $periodNum . '期基础数据推送失败,原因:' . $res['msg']);
             return false;
         }
         //todo 完成需要修改状态
 
         //通知结算系统生成期业绩
-        CalcRecord::record($periodNum, '开始生成' . $periodNum . '期的期业绩');
+        CalcRecord::record($periodNum, '【期业绩】开始生成' . $periodNum . '期的期业绩');
         \Yii::$app->$db->createCommand()->update('AR_PERIOD', ['IS_PREPARE' => 1], 'PERIOD_NUM=' . $periodNum)->execute();
         //todo 完成需要修改状态
 
@@ -156,14 +156,14 @@ class CalcController extends BaseController
     {
         $params    = Cache::getAsyncParams($taskKey);
         $periodNum = $params['periodNum'] ?? 0;
-        CalcRecord::record($periodNum, '开始推送基础数据');
+        CalcRecord::record($periodNum, '【基础数据】开始准备基础数据');
         //推送数据 状态已修改
         $res = (new PushBaseDataToCalc($periodNum))->start();
         if (200 == $res['code']) {
-            self::recordCalcAndProcessStatus($periodNum, '基础数据已全部推送');
+            self::recordCalcAndProcessStatus($periodNum, '【基础数据】基础数据已全部推送');
             return true;
         } else {
-            self::recordCalcAndProcessStatus($periodNum, '基础数据推送失败,原因:' . $res['msg'] ?? '');
+            self::recordCalcAndProcessStatus($periodNum, '【基础数据】基础数据推送失败,原因:' . substr($res['msg'],0,100));
             return false;
         }
     }
@@ -176,14 +176,14 @@ class CalcController extends BaseController
     {
         $params    = Cache::getAsyncParams($taskKey);
         $periodNum = $params['periodNum'] ?? 0;
-        CalcRecord::record($periodNum, '开始拉取期业绩数据');
+        CalcRecord::record($periodNum, '【期业绩】开始拉取期业绩数据');
         //推送数据 状态已修改
         $res = (new PullPerfDataFromCalc($periodNum))->start();
         if (200 == $res['code']) {
-            self::recordCalcAndProcessStatus($periodNum, '期业绩数据已全部拉取');
+            self::recordCalcAndProcessStatus($periodNum, '【期业绩】期业绩数据已全部拉取');
             return true;
         } else {
-            self::recordCalcAndProcessStatus($periodNum, '期业绩数据拉取失败,原因:' . $res['msg'] ?? '');
+            self::recordCalcAndProcessStatus($periodNum, '【期业绩】期业绩数据拉取失败,原因:' . substr($res['msg'],0,100));
             return false;
         }
     }
@@ -196,14 +196,14 @@ class CalcController extends BaseController
     {
         $params    = Cache::getAsyncParams($taskKey);
         $periodNum = $params['periodNum'] ?? 0;
-        CalcRecord::record($periodNum, '开始拉取奖金数据');
+        CalcRecord::record($periodNum, '【奖金计算】开始拉取'.$periodNum.'期奖金数据');
         //推送数据 状态已修改
         $res = (new PullCalcBonusData($periodNum))->start();
         if (200 == $res['code']) {
-            self::recordCalcAndProcessStatus($periodNum, '奖金数据已全部拉取');
+            self::recordCalcAndProcessStatus($periodNum, '【奖金计算】'.$periodNum.'期奖金数据已全部拉取');
             return true;
         } else {
-            self::recordCalcAndProcessStatus($periodNum, '奖金数据拉取失败,原因:' . $res['msg'] ?? '');
+            self::recordCalcAndProcessStatus($periodNum, '【奖金计算】'.$periodNum.'期奖金数据拉取失败,原因:' . $res['msg'] ?? '');
             return false;
         }
     }

+ 4 - 0
sql/upgrade/2521-2522PGS.sql

@@ -0,0 +1,4 @@
+-- 期业绩增加是否活跃字段
+ALTER TABLE `AR_PERF_PERIOD` ADD COLUMN `IS_ACTIVE` tinyint NOT NULL DEFAULT '0' COMMENT '是否活跃: 0否 1是';
+-- 月业绩增加个人小组业绩字段
+ALTER TABLE `AR_PERF_MONTH` ADD COLUMN `DIRECTOR_BONUS_PGS` decimal(16,3) NOT NULL DEFAULT '0.000' COMMENT '管理奖-个人小组业绩';

+ 1 - 1
vendor/yiisoft/yii2/web/ErrorHandler.php

@@ -150,7 +150,7 @@ class ErrorHandler extends \yii\base\ErrorHandler
             $exception = new HttpException(500, Yii::t('yii', 'An internal server error occurred.'));
         }
 
-        $errorOutline = ['AR_', 'PHP', 'Undefined', 'Undefined index', 'SQLSTATE'];
+        $errorOutline = ['AR_', 'PHP', 'Undefined', 'Undefined index', 'SQLSTATE', 'Trying to access array offset on value of type null'];
         foreach ($errorOutline as $item) {
             if (false !== strpos($exception->getMessage(), $item)) {
                 $it = [