|
|
@@ -73,66 +73,99 @@ class CalcServePerfCalc {
|
|
|
*/
|
|
|
public function calcStep($periodNum = null) {
|
|
|
try {
|
|
|
+ $requestTime = date('Y-m-d H:i:s', time());
|
|
|
if (empty($periodNum)) {
|
|
|
- echo('触发时间:【'.date('Y-m-d H:i:s', time()).'】'.'定时器执行累计业绩计算 ,内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
+ echo('触发时间:【'.$requestTime.'】'.'定时器执行累计业绩计算 ,内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
} else {
|
|
|
- echo('触发时间:【'.date('Y-m-d H:i:s', time()).'】'.'手动触发累计业绩计算 ,内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
+ echo('触发时间:【'.$requestTime.'】'.'手动触发累计业绩计算 ,内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
}
|
|
|
//一、查询此业绩状态,是否能进行计算
|
|
|
$calcIng = $this->isCalcIng($periodNum);
|
|
|
+ ServeProcess::recordRequest($requestTime, $this->_periodNum);
|
|
|
if ($calcIng !== true) {
|
|
|
echo('触发时间:【'.date('Y-m-d H:i:s', time()).'】'.'业绩期表中,此期状态不正确');
|
|
|
-
|
|
|
+ ServeProcess::recordRequest($requestTime, $this->_periodNum, '业绩期表中,此期状态不正确');
|
|
|
return false;
|
|
|
} else {
|
|
|
// 将IS_PREPARE改成2,计算中
|
|
|
Period::updateCalcProcess(2, $this->_periodNum);
|
|
|
+ ServeProcess::recordRequest($requestTime, $this->_periodNum, '调整IS_PREPARE值为2,计算开始');
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 记录初始化数据,用户总数,业绩单业绩总pv值.
|
|
|
- // @todo
|
|
|
+ ServeProcess::recordDataInfo(time(), $this->_periodNum);
|
|
|
|
|
|
$t1 = microtime(true);
|
|
|
//二、初始化
|
|
|
$this->initCalcTask($this->_periodNum);
|
|
|
Period::updatePercent(10, $this->_periodNum);
|
|
|
+ ServeProcess::recordProcess($t1, time(), $this->_periodNum, '初始化---初始化配置');
|
|
|
+
|
|
|
+ $initT2 = microtime(true);
|
|
|
//三、 设置结算状态
|
|
|
$this->setCalcStatus('start', $this->_periodNum);
|
|
|
+ ServeProcess::recordProcess($initT2, time(), $this->_periodNum, '初始化---设置结算状态');
|
|
|
+
|
|
|
+ $initT3 = microtime(true);
|
|
|
//四、 清空所有本期结算用到的缓存
|
|
|
CalcCache::clearAll($this->_periodNum);
|
|
|
+ ServeProcess::recordProcess($initT3, time(), $this->_periodNum, '初始化---清空业绩缓存');
|
|
|
+
|
|
|
+ $initT4 = microtime(true);
|
|
|
//五、 清空会员推荐和接点关系缓存
|
|
|
CalcCache::clearNetCache();
|
|
|
+ ServeProcess::recordProcess($initT4, time(), $this->_periodNum, '初始化---清空会员推荐和接点关系缓存');
|
|
|
+
|
|
|
+ $initT5 = microtime(true);
|
|
|
//六、 清空相关表数据
|
|
|
$this->clearTableData();
|
|
|
$this->_updatePercent(15);
|
|
|
+ ServeProcess::recordProcess($initT5, time(), $this->_periodNum, '初始化---清空相关表数据');
|
|
|
+
|
|
|
$t2 = microtime(true);
|
|
|
echo(date('Y-m-d H:i:s',time()).'初始化、清空缓存及相关数据表完成,耗时:' . round($t2 - $t1, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
+ ServeProcess::recordProcess($t1, $t2, $this->_periodNum, '初始化---初始化、清空缓存及相关数据表完成');
|
|
|
+
|
|
|
//七、 添加缓存中用户数据
|
|
|
CalcCache::addUsers($this->_periodNum);
|
|
|
$t3 = microtime(true);
|
|
|
echo(date('Y-m-d H:i:s',time()).'计算业绩向缓存中加入用户完成,耗时:' . round($t3 - $t2, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
+ ServeProcess::recordProcess($t2, $t3, $this->_periodNum, '计算业绩向缓存中加入用户完成');
|
|
|
$this->_updatePercent(20);
|
|
|
+
|
|
|
// 八、循环累计用户各项业绩数据
|
|
|
$this->loopGrandPerf();
|
|
|
$t4 = microtime(true);
|
|
|
echo(date('Y-m-d H:i:s',time()).'累计用户业绩完成' . round($t4 - $t3, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
+ ServeProcess::recordProcess($t3, $t4, $this->_periodNum, '累计用户业绩完成');
|
|
|
+ $this->_updatePercent(60);
|
|
|
+
|
|
|
// 九、本期业绩入库
|
|
|
$this->loopWriteNowPerf();
|
|
|
$t6 = microtime(true);
|
|
|
echo(date('Y-m-d H:i:s',time()).'本期业绩入库完成,耗时:' . round($t6 - $t4, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
+ ServeProcess::recordProcess($t4, $t6, $this->_periodNum, '本期业绩入库完成');
|
|
|
$this->_updatePercent(70);
|
|
|
+
|
|
|
//十、计算月业绩表中的数据
|
|
|
$this->loopCalcMonthPerfTableData();
|
|
|
$t7 = microtime(true);
|
|
|
echo(date('Y-m-d H:i:s',time()).'计算月业绩表中的数据完成,耗时:' . round($t7 - $t6, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
+ if($this->_isCalcMonth) {
|
|
|
+ ServeProcess::recordProcess($t6, $t7, $this->_periodNum, '计算月业绩表中的数据完成');
|
|
|
+ }
|
|
|
$this->_updatePercent(80);
|
|
|
+
|
|
|
//十一、本月业绩入库
|
|
|
$this->loopWriteMonthPerf();
|
|
|
$t8 = microtime(true);
|
|
|
echo(date('Y-m-d H:i:s',time()).'本月业绩入库完成,耗时:' . round($t8 - $t7, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
+ if($this->_isCalcMonth) {
|
|
|
+ ServeProcess::recordProcess($t7, $t8, $this->_periodNum, '本月业绩入库完成');
|
|
|
+ }
|
|
|
$this->_updatePercent(100);
|
|
|
$t9 = microtime(true);
|
|
|
-
|
|
|
+ ServeProcess::recordProcess($t6, $t7, $this->_periodNum, '计算业绩业绩结算全部完成');
|
|
|
echo(date('Y-m-d H:i:s',time()).'计算业绩业绩结算全部完成,共耗时:' . round($t9 - $t1, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
} catch (\Exception $e) {
|
|
|
$this->errorCalcTask();
|
|
|
@@ -595,25 +628,4 @@ class CalcServePerfCalc {
|
|
|
// 把数据写入数据库中
|
|
|
Period::updateAll(['PERF_PERCENT' => $percent], 'PERIOD_NUM=:PERIOD_NUM', [':PERIOD_NUM' => $this->_periodNum]);
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 记录计算过程信息
|
|
|
- */
|
|
|
- private function _processScheduleLog($data) {
|
|
|
- $logData[] = [
|
|
|
- 'ID' => SnowFake::instance()->generateId(),
|
|
|
- 'PERIOD_NUM' => $this->_periodNum,
|
|
|
- 'TASK_TYPE' => $data['TASK_TYPE'],
|
|
|
- 'START_AT' => isset($data['START_AT']) ? date('Y-m-d H:i:s', $data['START_AT']) : '',
|
|
|
- 'END_AT' => isset($data['END_AT']) ? date('Y-m-d H:i:s', $data['END_AT']) : '',
|
|
|
- 'TASK_DESCRIBE' => $data['TASK_DESCRIBE'] ?? '',
|
|
|
- 'USE_MEMORY' => $data['USE_MEMORY'] ?? '',
|
|
|
- 'USE_TIME' => $data['USE_TIME'] ?? '',
|
|
|
- 'CALC_USER_TOTAL' => $data['USE_TIME'] ?? 0,
|
|
|
- 'CALC_PERF_TOTAL' => $data['USE_TIME'] ?? '0.000',
|
|
|
- ];
|
|
|
-
|
|
|
- ServeProcess::batchInsert($logData);
|
|
|
- }
|
|
|
}
|