This commit is contained in:
aozhiwei 2021-12-13 14:54:34 +08:00
parent c26641207d
commit 5b4dfb8bef
2 changed files with 97 additions and 49 deletions

View File

@ -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);
}
}

View File

@ -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;