|
|
@@ -146,88 +146,37 @@ class CalcConsole extends BaseBusiness
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- public static function autoPrePerf(){ // 定时计算
|
|
|
+ // 定时计算
|
|
|
+ public static function autoPrePerf()
|
|
|
+ {
|
|
|
$nowTs = time();
|
|
|
$currentPeriod = Period::find()->where('START_TIME< :NOW_TIME',['NOW_TIME'=>$nowTs])->where('END_TIME>= :NOW_TIME',['NOW_TIME'=>$nowTs-6])->asArray()->one();
|
|
|
$periodNum = $currentPeriod['PERIOD_NUM'];
|
|
|
- $prevPeriodNum = $periodNum - 1; // 121
|
|
|
- $prevPeriod = Period::find()->where('PERIOD_NUM = :PERIOD_NUM',[':PERIOD_NUM'=>$prevPeriodNum])->asArray()->one();
|
|
|
-// if($prevPeriod['IS_SENT']==0) {
|
|
|
-// return;
|
|
|
-// }
|
|
|
- if (
|
|
|
- Period::isPreparing($periodNum)
|
|
|
-// || $currentPeriod['IS_MONTH'] == 0
|
|
|
- ) {
|
|
|
+ $prevPeriodNum = $periodNum - 1;
|
|
|
+ if (Period::isPreparing($periodNum)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
$nowDate = date("d", $nowTs);
|
|
|
$nowHour = date("H", $nowTs);
|
|
|
- $nowMin = date("i", $nowTs);
|
|
|
- $nowSec = date("s", $nowTs);
|
|
|
|
|
|
+ // 当计算中,则跳过
|
|
|
if(Period::isPreparing($periodNum)){ // 当计算中,则跳过
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
- if(($nowMin!=0 || $nowSec >= 5)){ // 如果不是整点小时,跳过
|
|
|
+ // 自动计算:次月1号凌晨计算一次上一期
|
|
|
+ if ($nowDate == 1 && $nowHour == 0) {
|
|
|
+ self::processAutoExec($prevPeriodNum);
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
- // 如果上一期没有挂网,则1-5号以及26~月底,每小时执行一次
|
|
|
- if ($prevPeriod['IS_SENT'] == 0) {
|
|
|
- echo('autoPrePerf: IS_SENT=0 当前期:' . $periodNum . ', 上一期:' . $prevPeriodNum . PHP_EOL);
|
|
|
- // 每小时整点执行一次
|
|
|
- if ($nowMin != 0) {
|
|
|
- echo('autoPrePerf: IS_SENT=0(e-1) 当前期:' . $periodNum . ', 上一期:' . $prevPeriodNum . ', 时间:' . $nowMin . PHP_EOL);
|
|
|
- return;
|
|
|
- }
|
|
|
- // 10~25不执行
|
|
|
- if ($nowDate >= 10 && $nowDate <= 25) {
|
|
|
- echo('autoPrePerf: IS_SENT=0(e-2) 当前期:' . $periodNum . ', 上一期:' . $prevPeriodNum . ', 日期:' . $nowDate . PHP_EOL);
|
|
|
- return;
|
|
|
- }
|
|
|
- } else {
|
|
|
- echo('autoPrePerf: IS_SENT=1 当前期:' . $periodNum . PHP_EOL);
|
|
|
- if( 1 < $nowDate && 10 >= $nowDate ){ // 10号及以前,不是0点,则跳过
|
|
|
- echo('autoPrePerf: IS_SENT=1(e-1) 当前期:' . $periodNum . ', 日期:' . $nowDate . PHP_EOL);
|
|
|
- if( $nowHour != 0) {
|
|
|
- echo('autoPrePerf: IS_SENT=1(e-2) 当前期:' . $periodNum . ', 日期:' . $nowDate . ', 时间:' . $nowHour . PHP_EOL);
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if( 15 < $nowDate && 25 >= $nowDate ){ // 下半月前10天,不是0点,则跳过
|
|
|
- echo('autoPrePerf: IS_SENT=1(e-3) 当前期:' . $periodNum . ', 日期:' . $nowDate . ', 时间:' . $nowHour . PHP_EOL);
|
|
|
- if( $nowHour != 0) {
|
|
|
- echo('autoPrePerf: IS_SENT=1(e-4) 当前期:' . $periodNum . ', 日期:' . $nowDate . ', 时间:' . $nowHour . PHP_EOL);
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
+ // 自动计算:从每月10号0点开始,每2小时自动计算一次
|
|
|
+ if ($nowDate >= 10 && $nowHour % 2 == 0) {
|
|
|
+ self::processAutoExec($periodNum);
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
-// if( 1 < $nowDate && 10 >= $nowDate ){ // 10号及以前,不是0点,则跳过
|
|
|
-// if( $nowHour != 0) {
|
|
|
-// return;
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// if( 15 < $nowDate && 25 >= $nowDate ){ // 下半月前10天,不是0点,则跳过
|
|
|
-// if( $nowHour != 0) {
|
|
|
-// return;
|
|
|
-// }
|
|
|
-// }
|
|
|
-// if($nowDate >1 && $nowDate <= 15 || (($nowMin!=0 || $nowSec >= 5 ) || Period::isPreparing($periodNum)) ){ // 当不是整点小时,当计算中,不计算
|
|
|
-// return;
|
|
|
-// }
|
|
|
-//
|
|
|
-// if (($nowTs + 86400 < $currentPeriod['END_TIME']) && $nowHour > 0) {
|
|
|
-// return;
|
|
|
-// }
|
|
|
-
|
|
|
- print_r($periodNum."该预结算".$nowMin.PHP_EOL.$nowSec);
|
|
|
-
|
|
|
+ private static function processAutoExec($periodNum)
|
|
|
+ {
|
|
|
//设置计算进行中标识
|
|
|
Period::updatePeriodIsPreparing($periodNum, Period::IS_PREPARING);
|
|
|
//设置自动计算标识
|
|
|
@@ -236,9 +185,9 @@ class CalcConsole extends BaseBusiness
|
|
|
$calc_id = uniqid('calc_');
|
|
|
CalcOperation::record($calc_id, $periodNum);
|
|
|
Period::updateAll(['START_EXEC_TIME' => time(), 'CALC_ID' => $calc_id], ['PERIOD_NUM' => $periodNum]);
|
|
|
+
|
|
|
$formModel = new PeriodForm();
|
|
|
$formModel->scenario = 'autoPerf';
|
|
|
-
|
|
|
if($formModel->load(['periodNum'=>$periodNum], '') && $formModel->autoPrePerf()) {
|
|
|
echo('自动计算已开始,请等待'.PHP_EOL);
|
|
|
//设置redis开关
|
|
|
@@ -248,8 +197,6 @@ class CalcConsole extends BaseBusiness
|
|
|
echo('自动计算未开始'.PHP_EOL);
|
|
|
CalcRecord::record($periodNum, '【定时计算】第' . $periodNum . '期,定时计算未开始');
|
|
|
}
|
|
|
- return;
|
|
|
-
|
|
|
}
|
|
|
|
|
|
/**
|