Commit 8b090b555ca722e3b01f3b0ad8abe5285016e0c1
1 parent
a6bef0a5
变更缓存写入方式
Showing
2 changed files
with
46 additions
and
37 deletions
src/ApiV2/Mapping.php
| @@ -7,6 +7,8 @@ | @@ -7,6 +7,8 @@ | ||
| 7 | */ | 7 | */ |
| 8 | namespace deepseath\hris\ApiV2; | 8 | namespace deepseath\hris\ApiV2; |
| 9 | 9 | ||
| 10 | +use Symfony\Contracts\Cache\ItemInterface; | ||
| 11 | + | ||
| 10 | class Mapping | 12 | class Mapping |
| 11 | { | 13 | { |
| 12 | /** | 14 | /** |
| @@ -38,29 +40,34 @@ class Mapping | @@ -38,29 +40,34 @@ class Mapping | ||
| 38 | } | 40 | } |
| 39 | } | 41 | } |
| 40 | 42 | ||
| 41 | - $cache = $this->service->cache(); | ||
| 42 | - $cachePool = $cache->getItem('mappings'); | ||
| 43 | - if (!$cachePool->isHit() | ||
| 44 | - || $force !== false | ||
| 45 | - || !($mappings = $cachePool->get()) | ||
| 46 | - || !isset($mappings['expire_at']) | ||
| 47 | - || time() - $mappings['expire_at'] > $this->service->config['mapping_expire']) { | ||
| 48 | - | ||
| 49 | - $result = $this->service->apiRequest('get', 'mappingVO', []); | ||
| 50 | - $mappings = []; | ||
| 51 | - foreach ($result['mappings'] ?? [] as $mapping) { | ||
| 52 | - $mappings[$mapping['mappingType']][$mapping['mappingId']] = $mapping['mappingValue']; | ||
| 53 | - } | ||
| 54 | - $mappings = [ | ||
| 55 | - 'expire_at' => time(), | ||
| 56 | - 'data' => $mappings | ||
| 57 | - ]; | ||
| 58 | - $cachePool->set($mappings); | ||
| 59 | - $cachePool->expiresAfter($this->service->config['mapping_expire']); | ||
| 60 | - $cache->save($cachePool); | 43 | + if ($force !== false) { |
| 44 | + $mappings = $this->_getWithoutCache(); | ||
| 45 | + } else { | ||
| 46 | + $cache = $this->service->cache(); | ||
| 47 | + $mappings = $cache->get('hris_mappings', function (ItemInterface $item) { | ||
| 48 | + $mappings = $this->_getWithoutCache(); | ||
| 49 | + $item->expiresAfter($this->service->config['mapping_expire']); | ||
| 50 | + return $mappings; | ||
| 51 | + }); | ||
| 52 | + unset($cache); | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + return $field === null ? $mappings : $mappings[$type]; | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + /** | ||
| 59 | + * 无缓存获取 mappings | ||
| 60 | + * @return array | ||
| 61 | + */ | ||
| 62 | + private function _getWithoutCache() : array | ||
| 63 | + { | ||
| 64 | + $result = $this->service->apiRequest('get', 'mappingVO', []); | ||
| 65 | + $mappings = []; | ||
| 66 | + foreach ($result['mappings'] ?? [] as $mapping) { | ||
| 67 | + $mappings[$mapping['mappingType']][$mapping['mappingId']] = $mapping['mappingValue']; | ||
| 61 | } | 68 | } |
| 62 | -//print_r(array_keys($mappings['data'])); | ||
| 63 | - return $field === null ? $mappings['data'] : $mappings['data'][$type]; | 69 | + unset($result, $mapping); |
| 70 | + return $mappings; | ||
| 64 | } | 71 | } |
| 65 | 72 | ||
| 66 | /** | 73 | /** |
src/Hris.php
| @@ -8,6 +8,7 @@ | @@ -8,6 +8,7 @@ | ||
| 8 | namespace deepseath\hris; | 8 | namespace deepseath\hris; |
| 9 | 9 | ||
| 10 | use Symfony\Component\Cache\Adapter\FilesystemAdapter; | 10 | use Symfony\Component\Cache\Adapter\FilesystemAdapter; |
| 11 | +use Symfony\Contracts\Cache\ItemInterface; | ||
| 11 | 12 | ||
| 12 | class Hris | 13 | class Hris |
| 13 | { | 14 | { |
| @@ -125,11 +126,22 @@ class Hris | @@ -125,11 +126,22 @@ class Hris | ||
| 125 | */ | 126 | */ |
| 126 | public function getTokenInfo(bool $force = false) : array | 127 | public function getTokenInfo(bool $force = false) : array |
| 127 | { | 128 | { |
| 128 | - $token = $this->_cache->getItem('token'); | ||
| 129 | - if ($token->isHit() && $force === false) { | ||
| 130 | - return $token->get(); | 129 | + if ($force !== false) { |
| 130 | + return $this->_getTokenInfoWithoutCache(); | ||
| 131 | + } else { | ||
| 132 | + return $this->_cache->get('hris_token', function (ItemInterface $item) { | ||
| 133 | + $tokenInfo = $this->_getTokenInfoWithoutCache(); | ||
| 134 | + $item->expiresAfter($tokenInfo['expires_in']); | ||
| 135 | + return $tokenInfo; | ||
| 136 | + }); | ||
| 131 | } | 137 | } |
| 138 | + } | ||
| 132 | 139 | ||
| 140 | + /** | ||
| 141 | + * 获取 token 信息,无缓存 | ||
| 142 | + */ | ||
| 143 | + private function _getTokenInfoWithoutCache() | ||
| 144 | + { | ||
| 133 | // 初始化 token 信息 | 145 | // 初始化 token 信息 |
| 134 | $newTokenInfo = []; | 146 | $newTokenInfo = []; |
| 135 | // 构造 token 获取接口地址 | 147 | // 构造 token 获取接口地址 |
| @@ -155,19 +167,9 @@ class Hris | @@ -155,19 +167,9 @@ class Hris | ||
| 155 | if ($newTokenInfo['code'] != 200) { | 167 | if ($newTokenInfo['code'] != 200) { |
| 156 | throw new \Exception('HRIS TOKEN GET ERROR:' . $newTokenInfo['msg'] . ':' . $newTokenInfo['code']); | 168 | throw new \Exception('HRIS TOKEN GET ERROR:' . $newTokenInfo['msg'] . ':' . $newTokenInfo['code']); |
| 157 | } | 169 | } |
| 158 | - | ||
| 159 | - $newTokenInfo['_datetime'] = date('Y-m-d H:i:s'); | ||
| 160 | - // 将本次获取的 token 值写入到缓存 | ||
| 161 | - $token->set($newTokenInfo); | ||
| 162 | - if (isset($newTokenInfo['expires_in'])) { | ||
| 163 | - $expire = $newTokenInfo['expires_in']; | ||
| 164 | - } else { | ||
| 165 | - $expire = $this->_tokenExpire; | 170 | + if (!isset($newTokenInfo['expires_in'])) { |
| 171 | + $newTokenInfo['expires_in'] = $this->_tokenExpire; | ||
| 166 | } | 172 | } |
| 167 | - $token->expiresAfter($expire - 10); | ||
| 168 | - $this->log($token->get(), 'Save Token'); | ||
| 169 | - $this->_cache->save($token); | ||
| 170 | - | ||
| 171 | return $newTokenInfo; | 173 | return $newTokenInfo; |
| 172 | } | 174 | } |
| 173 | 175 |