No Description

FxOrder.php 3.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2017/12/5
  6. * Time: 15:07
  7. */
  8. namespace App;
  9. use Illuminate\Database\Eloquent\Model;
  10. use PHPExcel;
  11. use PHPExcel_Writer_Excel2007;
  12. class FxOrder extends Model
  13. {
  14. public $timestamps = false;
  15. protected $table = "fx_order";
  16. public static function olist(){
  17. $result = FxOrder::orderBy('id', 'desc')->get();
  18. return json_decode(json_encode($result),true);
  19. }
  20. # 生成外部订单号
  21. public static function createOuterCode(){
  22. $order_sn = 'fx'.rand(100, 9999). substr(time(), 5, 5). rand(10, 9999);
  23. return $order_sn;
  24. }
  25. /*更新城市天气信息*/
  26. public static function updateWeather($order_id) {
  27. $redisKey = 'seafood_order_city_weather';
  28. $appKey = self::getAppKey();
  29. //查询订单收件人所在的城市(过滤关键字 市)
  30. $city = self::where('id', $order_id)->pluck('receiverCity');
  31. $city = str_replace('市','',$city);
  32. $specialCity = array('朝阳区','嘉定区','海淀区','昌平区','密云区','大兴区','房山区','通州区','普陀区',);
  33. if(in_array($city, $specialCity)) {
  34. $city = str_replace('区','',$city);
  35. }
  36. //查询redis中是否有该键,若没有则查询
  37. $weather = RedisModel::get($redisKey.'_'.$city);
  38. if($weather) {
  39. $sellerMemo = self::where('id', $order_id)->pluck('sellerMemo');
  40. $sellerMemo = $sellerMemo.' '.$city.'天气状况:'.$weather;
  41. self::where('id', $order_id)->update(['sellerMemo'=>$sellerMemo]);
  42. } else {
  43. $url = 'http://apis.juhe.cn/simpleWeather/query?city='.urlencode($city).'&key='.$appKey;
  44. $result = file_get_contents($url);
  45. $result = json_decode($result, true);
  46. if($result['error_code'] == '0') {
  47. //将数据缓存到redis里
  48. $today = date('Y-m-d',time());
  49. $tomorrow = date('Y-m-d',strtotime('+1 days'));
  50. $weather = '';
  51. foreach ($result['result']['future'] as $value) {
  52. if($value['date'] == $today) {
  53. $weather .= $today.'日气温:'.$value['temperature'].'; ';
  54. }
  55. if($value['date'] == $tomorrow) {
  56. $weather .= $tomorrow.'日气温:'.$value['temperature'];
  57. }
  58. }
  59. RedisModel::set($redisKey.'_'.$city, $weather);
  60. $endTime = strtotime(date('Y-m-d 00:00:00',strtotime('+1 days'))) -1;
  61. $expire = $endTime - time();
  62. RedisModel::expire($redisKey.'_'.$city, $expire);
  63. $sellerMemo = self::where('id', $order_id)->pluck('sellerMemo');
  64. $sellerMemo = $sellerMemo.' '.$city.'天气状况:'.$weather;
  65. self::where('id', $order_id)->update(['sellerMemo'=>$sellerMemo]);
  66. } else if($result['error_code'] == '10012'){
  67. //超过100次/天上限 更换APPKey
  68. RedisModel::set('seafood_order_city_weather_key', '1');
  69. self::updateWeather($order_id);
  70. }
  71. }
  72. return true;
  73. }
  74. public static function getAppKey() {
  75. $redisKey = 'seafood_order_city_weather_key';
  76. $appKeyArr = ['32c8f844f8055f70f702fc28ec930e52', '85bfc19adb25998b2559d7ceba950e13'];
  77. $appKey = RedisModel::get($redisKey);
  78. if($appKey) {
  79. return $appKeyArr[$appKey];
  80. } else {
  81. RedisModel::set($redisKey, '0');
  82. $endTime = strtotime(date('Y-m-d 00:00:00',strtotime('+1 days'))) -1;
  83. $expire = $endTime - time();
  84. RedisModel::expire($redisKey, $expire);
  85. }
  86. }
  87. }