ProvinceService.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace App\Services;
  3. use App\Province;
  4. use Illuminate\Database\Eloquent\Model;
  5. use Illuminate\Support\Str;
  6. use App\Traits\ServiceAppAop;
  7. class ProvinceService
  8. {
  9. use ServiceAppAop;
  10. protected $modelClass=Province::class;
  11. public static $provinces = ['青海','新疆','内蒙古','广西','西藏','宁夏','北京','上海','重庆','天津'];
  12. public function findByName($name)
  13. {
  14. if(!$name)return null;
  15. $province = Province::query()->where('name',$name)->first();
  16. if(isset($province))return $province;
  17. foreach (ProvinceService::$provinces as $province) {
  18. if(strstr($province,$name) != null || strstr($name,$province) != null){
  19. return Province::query()->where('name',$province)->first();
  20. }
  21. }
  22. if(str_ends_with($name,'市')){
  23. $province_name = Str::before($name,'市');
  24. return Province::query()->where('name','like',$province_name.'%')->first();
  25. }
  26. if(str_ends_with($name,'省')){
  27. $province_name = Str::before($name,'省');
  28. return Province::query()->where('name','like',$province_name.'%')->first();
  29. }
  30. return null;
  31. }
  32. public function first(array $params)
  33. {
  34. $query = Province::query();
  35. foreach ($params as $column=>$param){
  36. $query->where($column,$param);
  37. }
  38. return $query->first();
  39. }
  40. /**
  41. * 根据名称获取省份
  42. *
  43. * @param string|null $name
  44. *
  45. * @return Model|\stdClass
  46. */
  47. public function getProvince(?string $name):?Model
  48. {
  49. if (!$name)return null;
  50. $provinceName = mb_substr($name,0,2);
  51. return app(CacheService::class)->getOrExecute("province_".$provinceName,function ()use($provinceName){
  52. return Province::query()->where("name","like",$provinceName."%")->first();
  53. },86400);
  54. }
  55. }