|
|
@@ -3,8 +3,11 @@
|
|
|
namespace common\helpers\bonus\Calc;
|
|
|
|
|
|
|
|
|
+use common\helpers\Form;
|
|
|
use common\models\CalcRecord;
|
|
|
+use common\models\forms\PeriodForm;
|
|
|
use common\models\Period;
|
|
|
+use Yii;
|
|
|
|
|
|
class CalcConsole extends BaseBusiness
|
|
|
{
|
|
|
@@ -100,7 +103,43 @@ class CalcConsole extends BaseBusiness
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- public static function listenAutoPerfPeriod()
|
|
|
+ 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'];
|
|
|
+ if (Period::isProcessing($periodNum)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if($nowTs+86400>$currentPeriod['END_TIME'] ){
|
|
|
+ $nowMin = date("i", $nowTs);
|
|
|
+ $nowSec = date("s", $nowTs);
|
|
|
+ if(($nowMin!=0 || $nowSec >= 5 ) || Period::isProcessing($periodNum)){ // 当不是整点小时,当计算中,不计算
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ print_r($periodNum."该预结算".$nowMin.PHP_EOL.$nowSec);
|
|
|
+ //设置计算进行中标识
|
|
|
+ Period::updatePeriodIsProcessing($periodNum, Period::IS_PROCESSING);
|
|
|
+ //设置自动计算标识
|
|
|
+ Period::updatePeriodIsAutoExec($periodNum, Period::MANUAL_EXEC_CALC);
|
|
|
+ //记录开始计算的时间
|
|
|
+ Period::updateAll(['START_EXEC_TIME' => time()], ['PERIOD_NUM' => $periodNum]);
|
|
|
+ $formModel = new PeriodForm();
|
|
|
+ $formModel->scenario = 'autoPerf';
|
|
|
+
|
|
|
+ if($formModel->load(['periodNum'=>$periodNum], '') && $formModel->autoPrePerf()) {
|
|
|
+ echo('自动计算已开始,请等待'.PHP_EOL);
|
|
|
+ CalcRecord::record($periodNum, '第' . $periodNum . '期,定时计算开始');
|
|
|
+ } else {
|
|
|
+ echo('自动计算未开始'.PHP_EOL);
|
|
|
+ CalcRecord::record($periodNum, '第' . $periodNum . '期,定时计算未开始');
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }else{
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function listenAutoPerfPeriod() // 拉取预结算的结果
|
|
|
{
|
|
|
$db = self::CALC_DB_NAME;
|
|
|
$allPeriod = \Yii::$app->$db->createCommand("SELECT * FROM AR_PERIOD order by PERIOD_NUM desc")->queryAll();
|
|
|
@@ -115,15 +154,19 @@ class CalcConsole extends BaseBusiness
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- $businessPeriod = Period::find()->where(['PERIOD_NUM' => $period['PERIOD_NUM']])
|
|
|
- ->asArray()->one();
|
|
|
+ $businessPeriod = Period::find()->where(['PERIOD_NUM' => $period['PERIOD_NUM']])->asArray()->one();
|
|
|
|
|
|
- if ($businessPeriod['SEND_STARTED_AT'] > 0 || $businessPeriod['IS_SENT'] > 0) {
|
|
|
- //开始挂网 或者 已挂网 则直接返回
|
|
|
- return true;
|
|
|
+ if (
|
|
|
+ $businessPeriod['SEND_STARTED_AT'] > 0 || $businessPeriod['IS_SENT'] > 0 // 已挂网
|
|
|
+ || 1 != $businessPeriod['IS_PREPARING'] // 未在预计算中
|
|
|
+ || $period['PERFED_AT'] < $businessPeriod['START_EXEC_TIME'] // 计算服务中的计算时间,早于业务系统开始计算时间,说明是旧的,不拉取
|
|
|
+ ){
|
|
|
+ return false;
|
|
|
}
|
|
|
-
|
|
|
- if (2 == $period['IS_PREPARE'] && 1 == $period['IS_PERFED']) {
|
|
|
+ if (
|
|
|
+ 2 == $period['IS_PREPARE']
|
|
|
+ && 3 == $period['IS_PERFED']
|
|
|
+ ) {
|
|
|
//拉取期业绩
|
|
|
CalcRecord::record($period['PERIOD_NUM'], '第' . $period['PERIOD_NUM'] . '期的预计算业绩数据已生成');
|
|
|
CalcRecord::record($period['PERIOD_NUM'], '开始获取第' . $period['PERIOD_NUM'] . '期的预计算期业绩数据');
|
|
|
@@ -132,11 +175,15 @@ class CalcConsole extends BaseBusiness
|
|
|
$res = (new PullPerfDataFromCalc($period['PERIOD_NUM']))->start();
|
|
|
if (200 == $res['code']) {
|
|
|
Period::updatePeriodIsProcessing($period['PERIOD_NUM'], Period::NOT_PROCESSING);
|
|
|
+ //设置预计算标识
|
|
|
+ Period::updatePeriodIsPreparing($period['PERIOD_NUM'], Period::NOT_PREPARING);
|
|
|
CalcRecord::record($period['PERIOD_NUM'], '第' . $period['PERIOD_NUM'] . '期的预计算期业绩数据已获取');
|
|
|
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']);
|
|
|
return $res;
|
|
|
}
|