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 | ... | ... |