Commit 8b090b555ca722e3b01f3b0ad8abe5285016e0c1
1 parent
a6bef0a5
变更缓存写入方式
Showing
2 changed files
with
46 additions
and
37 deletions
src/ApiV2/Mapping.php
| ... | ... | @@ -7,6 +7,8 @@ |
| 7 | 7 | */ |
| 8 | 8 | namespace deepseath\hris\ApiV2; |
| 9 | 9 | |
| 10 | +use Symfony\Contracts\Cache\ItemInterface; | |
| 11 | + | |
| 10 | 12 | class Mapping |
| 11 | 13 | { |
| 12 | 14 | /** |
| ... | ... | @@ -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 | 8 | namespace deepseath\hris; |
| 9 | 9 | |
| 10 | 10 | use Symfony\Component\Cache\Adapter\FilesystemAdapter; |
| 11 | +use Symfony\Contracts\Cache\ItemInterface; | |
| 11 | 12 | |
| 12 | 13 | class Hris |
| 13 | 14 | { |
| ... | ... | @@ -125,11 +126,22 @@ class Hris |
| 125 | 126 | */ |
| 126 | 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 | 145 | // 初始化 token 信息 |
| 134 | 146 | $newTokenInfo = []; |
| 135 | 147 | // 构造 token 获取接口地址 |
| ... | ... | @@ -155,19 +167,9 @@ class Hris |
| 155 | 167 | if ($newTokenInfo['code'] != 200) { |
| 156 | 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 | 173 | return $newTokenInfo; |
| 172 | 174 | } |
| 173 | 175 | ... | ... |