Quellcode durchsuchen

团队查询,拉取,相关

theo vor 3 Jahren
Ursprung
Commit
37579442cf

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

@@ -46,6 +46,8 @@ class CalcController extends BaseController
         $formModel->scenario = 'autoPerf';
 
         if ($formModel->load(Yii::$app->request->get(), '') && $formModel->autoPerf()) {
+            //设置预计算进行中标识
+            Period::updatePeriodIsPreparing($periodNum, Period::IS_PREPARING);
             return static::notice('自动计算已开始,请等待');
         } else {
             return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);

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

@@ -67,7 +67,10 @@
         </el-table-column>
         <el-table-column fixed="right" label="Action" width="180"><!-- 操作 -->
           <template slot-scope="scope">
-            <el-button class="button" type="primary" @click.native="autoPerfHandle(scope.row.PERIOD_NUM)" >预计算</el-button>
+            <el-button v-if="scope.row.IS_CAN_CLOSE && permission.hasPermission(`bonus/close-period`)" class="button" type="primary"
+                       @click.native="autoPerfHandle(scope.row.PERIOD_NUM)" >
+              预计算
+            </el-button>
             <el-button v-if="scope.row.IS_CAN_CLOSE && permission.hasPermission(`bonus/close-period`)" type="primary" class="button"
                        @click.native="closeHandle(scope.row)">
               Closure period<!-- 封期 -->

+ 16 - 5
common/helpers/bonus/Calc/CalcConsole.php

@@ -99,11 +99,13 @@ if (empty($period)){
         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'];
-
+        if (Period::isProcessing($periodNum)) {
+            return;
+        }
         if($nowTs+86400>$currentPeriod['END_TIME'] ){
             $nowMin = date("i", $nowTs);
             $nowSec = date("s", $nowTs);
@@ -133,7 +135,7 @@ if (empty($period)){
         }
     }
 
-    public static function listenAutoPerfPeriod()
+    public static function listenAutoPerfPeriod() // 拉取预结算的结果
     {
         $db        = self::CALC_DB_NAME;
         $allPeriod = \Yii::$app->$db->createCommand("SELECT * FROM AR_PERIOD ")->queryAll();
@@ -152,11 +154,16 @@ if (empty($period)){
 
         $businessPeriod = Period::find()->where(['PERIOD_NUM' => $period['PERIOD_NUM']])->asArray()->one();
 
+        if (
+            $businessPeriod['IS_SENT'] // 已挂网
+            || 1 != $businessPeriod['IS_PREPARING'] // 未在预计算中
+            || $period['PERFED_AT'] < $businessPeriod['START_EXEC_TIME'] // 计算服务中的计算时间,早于业务系统开始计算时间,说明是旧的,不拉取
+        ){
+            return false;
+        }
         if (
             2 == $period['IS_PREPARE']
-            && 1 == $businessPeriod['IS_PROCESSING']
             && 3 == $period['IS_PERFED']
-            && $period['PERFED_AT']>$businessPeriod['START_EXEC_TIME']
         ) {
             //拉取期业绩
             CalcRecord::record($period['PERIOD_NUM'], '第' . $period['PERIOD_NUM'] . '期的预计算业绩数据已生成');
@@ -166,11 +173,15 @@ if (empty($period)){
             $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;
             }

+ 10 - 2
common/models/Period.php

@@ -60,6 +60,8 @@ class Period extends \common\components\ActiveRecord
     const MANUAL_EXEC_CALC = 0;
     const IS_PROCESSING = 1;
     const NOT_PROCESSING = 0;
+    const IS_PREPARING = 1;
+    const NOT_PREPARING = 0;
 
     public $nowPeriodArr = null;
     public $periodNum = null;
@@ -864,6 +866,11 @@ class Period extends \common\components\ActiveRecord
         return Period::updateAll(['IS_PROCESSING' => $isProcessing], ['PERIOD_NUM' => $periodNum]);
     }
 
+    public static function updatePeriodIsPreparing($periodNum, $isPreparing = 1): int
+    {
+        return Period::updateAll(['IS_PREPARING' => $isPreparing], ['PERIOD_NUM' => $periodNum]);
+    }
+
     /**
      * 是否计算操作中
      * @param $periodNum
@@ -872,9 +879,10 @@ class Period extends \common\components\ActiveRecord
     public static function isProcessing($periodNum = null): bool
     {
         $period = static::findOneAsArray(['PERIOD_NUM' => $periodNum]);
-        //挂网则拒绝操作
-        if ($period['IS_SENT'] == self::SEND_FINISH) return false;
+        //挂网则拒绝操作,返回true则拒绝操作
+        if ($period['IS_SENT'] == self::SEND_FINISH) return true;
         if ($period['IS_PROCESSING'] == self::IS_PROCESSING) return true;
+        if ($period['IS_PREPARING'] == self::IS_PREPARING) return true;
         return false;
     }