brook пре 3 година
родитељ
комит
204f5acacb

+ 8 - 5
backendApi/modules/v1/controllers/CalcController.php

@@ -40,6 +40,9 @@ class CalcController extends BaseController
         Period::updatePeriodIsProcessing($periodNum, Period::IS_PROCESSING);
         //设置自动计算标识
         Period::updatePeriodIsAutoExec($periodNum, Period::AUTO_EXEC_CALC);
+        //记录开始计算的时间
+        Period::updateAll(['START_EXEC_TIME' => time()], ['PERIOD_NUM' => $periodNum]);
+
         $formModel           = new PeriodForm();
         $formModel->scenario = 'perf';
 
@@ -218,14 +221,14 @@ class CalcController extends BaseController
         if (empty($period)) {
             Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
             return static::notice('计算系统中的第' . $periodNum . '期的业绩期信息不存在');
-        } else if (1 == $period['IS_PERFED'] && 2 == $period['IS_PREPARE']) {
-            Period::updateAll(['IS_CALCULATED' => 0], ['PERIOD_NUM' => $period['PERIOD_NUM']]);
+        } else/* if (1 == $period['IS_PERFED'] && 2 == $period['IS_PREPARE']) */ {
+            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, '奖金已于计算系统中开始计算,请等待');
-            \Yii::$app->$db->createCommand()->update('AR_PERIOD', ['IS_PREPARE' => 3], 'PERIOD_NUM=' . $periodNum)->execute();
+            \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('本期奖金已于计算系统中开始计算,请等待');
-        } else {
-            return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
         }
     }
 

+ 10 - 7
common/helpers/bonus/Calc/CalcConsole.php

@@ -31,6 +31,13 @@ class CalcConsole extends BaseBusiness
         $businessIsCalculated = $businessPeriod['IS_CALCULATED'] == Period::CALCULATE_FINISH;
         $startExecTime        = $businessPeriod['START_EXEC_TIME'] ?? 0;
 
+        echo $businessPeriod['IS_CALCING'];
+        //同步计算进度日志到业务系统
+        if (4 == $period['IS_PREPARE'] && 1 == $period['IS_CALCULATED'] && 1 == $businessPeriod['IS_CALCING']) {
+            self::syncCalcRecord($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) {
             //拉取期业绩
             CalcRecord::record($period['PERIOD_NUM'], '第' . $period['PERIOD_NUM'] . '期的业绩数据已生成');
@@ -55,11 +62,6 @@ class CalcConsole extends BaseBusiness
             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'] && 0 == $period['IS_CALCULATED']) {
-            self::syncCalcRecord($period['PERIOD_NUM'], $db, $startExecTime);
-        }
-
         if (4 == $period['IS_PREPARE'] && 1 == $period['IS_CALCULATED'] && $autoExec && !$businessIsCalculated) {
             CalcRecord::record($period['PERIOD_NUM'], '第' . $period['PERIOD_NUM'] . '期的奖金已计算完成');
             CalcRecord::record($period['PERIOD_NUM'], '开始拉取第' . $period['PERIOD_NUM'] . '期的奖金数据');
@@ -71,14 +73,15 @@ class CalcConsole extends BaseBusiness
                 CalcRecord::record($period['PERIOD_NUM'], '第' . $period['PERIOD_NUM'] . '期的奖金数据已全部拉取');
                 //待拉取完成后再将计算完成标识改为已完成
                 \Yii::$app->db->createCommand()->update('AR_PERIOD', ['IS_CALCULATED' => 1], 'PERIOD_NUM=' . $period['PERIOD_NUM'])->execute();
-                //拉取计算系统的进度日志
-                self::syncCalcRecord($period['PERIOD_NUM'], $db, $startExecTime);
+
                 //自动执行完成 更新对应字段
                 //计算结束
                 Period::updatePeriodIsProcessing($period['PERIOD_NUM'], Period::NOT_PROCESSING);
                 //流程结束
                 //同步周期表的值到业务系统
                 self::pullPeriodForUpdate($period['PERIOD_NUM']);
+                //拉取计算系统的进度日志
+                self::syncCalcRecord($period['PERIOD_NUM'], $db, $startExecTime);
             } else {
                 //结束计算状态
                 Period::updatePeriodIsProcessing($period['PERIOD_NUM'], Period::NOT_PROCESSING);

+ 1 - 1
common/models/Period.php

@@ -861,7 +861,7 @@ class Period extends \common\components\ActiveRecord
 
     public static function updatePeriodIsProcessing($periodNum, $isProcessing = 1): int
     {
-        return Period::updateAll(['IS_PROCESSING' => $isProcessing, 'START_EXEC_TIME' => time()], ['PERIOD_NUM' => $periodNum]);
+        return Period::updateAll(['IS_PROCESSING' => $isProcessing], ['PERIOD_NUM' => $periodNum]);
     }
 
     /**