|
@@ -196,4 +196,86 @@ class OrderScript extends Model
|
196
|
196
|
}
|
197
|
197
|
}
|
198
|
198
|
|
|
199
|
+ /*更新城市天气信息*/
|
|
200
|
+ public static function updateWeather($order_id) {
|
|
201
|
+ $redisKey = 'seafood_order_city_weather';
|
|
202
|
+ //查询订单收件人所在的城市(过滤关键字 市)
|
|
203
|
+ $city = Order::where('id', $order_id)->pluck('receiverCity');
|
|
204
|
+ $city = str_replace('市','',$city);
|
|
205
|
+ $specialCity = array('朝阳区','嘉定区','海淀区','昌平区','密云区','大兴区','房山区','通州区','普陀区',);
|
|
206
|
+ if(in_array($city, $specialCity)) {
|
|
207
|
+ $city = str_replace('区','',$city);
|
|
208
|
+ }
|
|
209
|
+ //查询redis中是否有该键,若没有则查询
|
|
210
|
+ $weather = RedisModel::get($redisKey.'_'.$city);
|
|
211
|
+ if($weather) {
|
|
212
|
+ $sellerMemo = Order::where('id', $order_id)->pluck('sellerMemo');
|
|
213
|
+ if(strstr($sellerMemo, $city.'天气状况:'.$weather)) {
|
|
214
|
+ return true;
|
|
215
|
+ }
|
|
216
|
+ $sellerMemo = $sellerMemo.' '.$city.'天气状况:'.$weather;
|
|
217
|
+ Log::scriptLog(['order_id'=>$order_id, 'city'=> $city , 'app_key'=>''],['weather'=>$weather],"order/weather",1,'');
|
|
218
|
+ Order::where('id', $order_id)->update(['sellerMemo'=>$sellerMemo]);
|
|
219
|
+ } else {
|
|
220
|
+ $appKey = self::getAppKey();
|
|
221
|
+ $url = 'http://apis.juhe.cn/simpleWeather/query?city='.urlencode($city).'&key='.$appKey;
|
|
222
|
+ $result = file_get_contents($url);
|
|
223
|
+ $result = json_decode($result, true);
|
|
224
|
+ if($result['error_code'] == '0') {
|
|
225
|
+ //将数据缓存到redis里
|
|
226
|
+ $today = date('Y-m-d',time());
|
|
227
|
+ $tomorrow = date('Y-m-d',strtotime('+1 days'));
|
|
228
|
+ $weather = '';
|
|
229
|
+ foreach ($result['result']['future'] as $value) {
|
|
230
|
+ if($value['date'] == $today) {
|
|
231
|
+ $weather .= $today.'日气温:'.$value['temperature'].'; ';
|
|
232
|
+ }
|
|
233
|
+ if($value['date'] == $tomorrow) {
|
|
234
|
+ $weather .= $tomorrow.'日气温:'.$value['temperature'];
|
|
235
|
+ }
|
|
236
|
+ }
|
|
237
|
+
|
|
238
|
+ RedisModel::set($redisKey.'_'.$city, $weather);
|
|
239
|
+ $endTime = strtotime(date('Y-m-d 00:00:00',strtotime('+1 days'))) -1;
|
|
240
|
+ $expire = $endTime - time();
|
|
241
|
+ RedisModel::expire($redisKey.'_'.$city, $expire);
|
|
242
|
+ $sellerMemo = Order::where('id', $order_id)->pluck('sellerMemo');
|
|
243
|
+ if(strstr($sellerMemo, $city.'天气状况:'.$weather)) {
|
|
244
|
+ return true;
|
|
245
|
+ }
|
|
246
|
+ $sellerMemo = $sellerMemo.' '.$city.'天气状况:'.$weather;
|
|
247
|
+ Log::scriptLog(['order_id'=>$order_id, 'city'=> $city , 'app_key'=>$appKey],['weather'=>$weather],"order/weather",1,'');
|
|
248
|
+ Order::where('id', $order_id)->update(['sellerMemo'=>$sellerMemo]);
|
|
249
|
+ } else if($result['error_code'] == '10012'){
|
|
250
|
+ //判断是否为第二个APPkey也用完了
|
|
251
|
+ $key = (string) RedisModel::get('seafood_order_city_weather_key');
|
|
252
|
+ if($key == '0') {
|
|
253
|
+ //超过100次/天上限 更换APPKey
|
|
254
|
+ RedisModel::set('seafood_order_city_weather_key', '1');
|
|
255
|
+ $endTime = strtotime(date('Y-m-d 00:00:00',strtotime('+1 days'))) -1;
|
|
256
|
+ $expire = $endTime - time();
|
|
257
|
+ RedisModel::expire('seafood_order_city_weather_key', $expire);
|
|
258
|
+ self::updateWeather($order_id);
|
|
259
|
+ }
|
|
260
|
+ }
|
|
261
|
+ }
|
|
262
|
+
|
|
263
|
+ return true;
|
|
264
|
+ }
|
|
265
|
+
|
|
266
|
+ public static function getAppKey() {
|
|
267
|
+ $redisKey = 'seafood_order_city_weather_key';
|
|
268
|
+ $appKeyArr = ['32c8f844f8055f70f702fc28ec930e52', '85bfc19adb25998b2559d7ceba950e13'];
|
|
269
|
+ $appKey = (string)RedisModel::get($redisKey);
|
|
270
|
+ if($appKey != '') {
|
|
271
|
+ return $appKeyArr[$appKey];
|
|
272
|
+ } else {
|
|
273
|
+ RedisModel::set($redisKey, '0');
|
|
274
|
+ $endTime = strtotime(date('Y-m-d 00:00:00',strtotime('+1 days'))) -1;
|
|
275
|
+ $expire = $endTime - time();
|
|
276
|
+ RedisModel::expire($redisKey, $expire);
|
|
277
|
+ return $appKeyArr['0'];
|
|
278
|
+ }
|
|
279
|
+ }
|
|
280
|
+
|
199
|
281
|
}
|