From 5b4dfb8bef3c6cb7e4f84895519d78fa07d47f00 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 13 Dec 2021 14:54:34 +0800 Subject: [PATCH] 1 --- .../controller/BaseAuthedController.class.php | 16 +-- webapp/models/DynData.php | 130 ++++++++++++------ 2 files changed, 97 insertions(+), 49 deletions(-) diff --git a/webapp/controller/BaseAuthedController.class.php b/webapp/controller/BaseAuthedController.class.php index f0ca3a1..dd47ee1 100644 --- a/webapp/controller/BaseAuthedController.class.php +++ b/webapp/controller/BaseAuthedController.class.php @@ -465,42 +465,42 @@ class BaseAuthedController extends BaseController { public function _getDailyV($x, $y, $defVal = 0) { - return DynData::getV($x, $y, $defVal); + return DynData::getDailyV($x, $y, $defVal); } public function _setDailyV($x, $y, $val) { - DynData::setV($x, $y, $val); + DynData::setDailyV($x, $y, $val); } public function _incDailyV($x, $y, $incVal) { - DynData::incV($x, $y, $incVal); + DynData::incDailyV($x, $y, $incVal); } public function _decDailyV($x, $y, $decVal) { - DynData::decV($x, $y, $decVal); + DynData::decDailyV($x, $y, $decVal); } public function _getWeeklyV($x, $y, $defVal = 0) { - return DynData::getV($x, $y, $defVal); + return DynData::getWeeklyV($x, $y, $defVal); } public function _setWeeklyV($x, $y, $val) { - DynData::setV($x, $y, $val); + DynData::setWeeklyV($x, $y, $val); } public function _incWeeklyV($x, $y, $incVal) { - DynData::incV($x, $y, $incVal); + DynData::incWeeklyV($x, $y, $incVal); } public function _decWeeklyV($x, $y, $decVal) { - DynData::decV($x, $y, $decVal); + DynData::decWeeklyV($x, $y, $decVal); } } diff --git a/webapp/models/DynData.php b/webapp/models/DynData.php index 401593d..f42ad28 100644 --- a/webapp/models/DynData.php +++ b/webapp/models/DynData.php @@ -30,47 +30,8 @@ class DynData extends BaseModel { public static function getV($x, $y, $defVal = 0) { - $key = self::calcKey($x, $y); - if (self::$dynData) { - if (isset($dynData[$key])) { - return getXVal(self::$dynData[$key], 'val', $defVal); - } else { - return $defVal; - } - } else { - ++self::$hitCount; - if (self::$hitCount > 5 && is_null(self::$dynData)) { - self::preload(); - return self::getV($x, $y, $defVal); - } else { - $row = SqlHelper::ormSelectOne( - myself()->_getSelfMysql(), - 't_dyndata', - array( - 'account_id' => myself()->_getAccountId(), - 'x' => $x, - 'y' => $y, - ) - ); - return $row ? $row['val'] : $defVal; - } - } - } - - public static function getDailyV($x, $y, $defVal = 0) - { - } - - public function _setDailyV($x, $y, $val) - { - } - - public function _incDailyV($x, $y, $incVal) - { - } - - public function _decDailyV($x, $y, $decVal) - { + $valData = self::internalGetV($x, $y, $defVal); + return $valData['val']; } public static function setV($x, $y, $defVal) @@ -91,6 +52,58 @@ class DynData extends BaseModel { self::incV($x, $y, 0 - $val); } + public static function getDailyV($x, $y, $defVal = 0) + { + $valData = self::internalGetV($x, $y, $defVal); + if (myself()->_getDaySeconds($valData['modifytime']) < myself()->_getNowDaySeconds()) { + $valData['val'] = $defVal; + } + return $valData['val']; + } + + public static function setDailyV($x, $y, $val) + { + self::setV($x, $y, $val); + } + + public static function incDailyV($x, $y, $Val) + { + $key = self::calcKey($x, $y); + $oldVal = self::getDailyV($x, $y); + self::internalSetV($x, $y, $oldVal + $val); + } + + public static function decDailyV($x, $y, $Val) + { + self::incDailyV($x, $y, 0 - $val); + } + + public static function getWeeklyV($x, $y, $defVal = 0) + { + $valData = self::internalGetV($x, $y, $defVal); + if (myself()->_getDaySeconds($valData['modifytime']) < myself()->_getMondaySeconds()) { + $valData['val'] = $defVal; + } + return $valData['val']; + } + + public static function setWeeklyV($x, $y, $val) + { + self::setV($x, $y, $val); + } + + public static function incWeeklyV($x, $y, $Val) + { + $key = self::calcKey($x, $y); + $oldVal = self::getWeeklyV($x, $y); + self::internalSetV($x, $y, $oldVal + $val); + } + + public static function decWeeklyV($x, $y, $Val) + { + self::incWeeklyV($x, $y, 0 - $val); + } + public static function calcKey($x, $y) { $low32 = (int)$x; @@ -143,6 +156,41 @@ class DynData extends BaseModel { } } + private static function internalGetV($x, $y, $defVal = 0) + { + $key = self::calcKey($x, $y); + if (self::$dynData) { + if (isset($dynData[$key])) { + return $dynData[$key]; + } else { + return array( + 'val' => $defVal, + 'modifytime' => $this->_getNowTime() + ); + } + } else { + ++self::$hitCount; + if (self::$hitCount > 5 && is_null(self::$dynData)) { + self::preload(); + return self::getV($x, $y, $defVal); + } else { + $row = SqlHelper::ormSelectOne( + myself()->_getSelfMysql(), + 't_dyndata', + array( + 'account_id' => myself()->_getAccountId(), + 'x' => $x, + 'y' => $y, + ) + ); + return array( + 'val' => $row ? $row['val'] : $defVal, + 'modifytime' => $row ? $row['modifytime'] : myself()->_getNowTime(), + ); + } + } + } + private static $dynData = null; private static $hitCount = 0;