UserAddress.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?php
  2. namespace app\api\model;
  3. use app\common\model\Region;
  4. use app\common\model\UserAddress as UserAddressModel;
  5. /**
  6. * 用户收货地址模型
  7. * Class UserAddress
  8. * @package app\common\model
  9. */
  10. class UserAddress extends UserAddressModel
  11. {
  12. /**
  13. * 隐藏字段
  14. * @var array
  15. */
  16. protected $hidden = [
  17. 'wxapp_id',
  18. 'create_time',
  19. 'update_time'
  20. ];
  21. /**
  22. * @param $user_id
  23. * @return false|static[]
  24. * @throws \think\exception\DbException
  25. */
  26. public function getList($user_id)
  27. {
  28. return self::all(compact('user_id'));
  29. }
  30. /**
  31. * 新增收货地址
  32. * @param User $user
  33. * @param $data
  34. * @return mixed
  35. */
  36. public function add($user, $data)
  37. {
  38. return $this->transaction(function () use ($user, $data) {
  39. // 整理地区信息
  40. $region = explode(',', $data['region']);
  41. $provinceId = Region::getIdByName($region[0], 1);
  42. $cityId = Region::getIdByName($region[1], 2, $provinceId);
  43. $regionId = Region::getIdByName($region[2], 3, $cityId);
  44. // 验证城市ID是否合法
  45. if (!$this->checkCityId($cityId)) return false;
  46. // 添加收货地址
  47. $this->allowField(true)->save([
  48. 'name' => $data['name'],
  49. 'phone' => $data['phone'],
  50. 'province_id' => $provinceId,
  51. 'city_id' => $cityId,
  52. 'region_id' => $regionId,
  53. 'detail' => $data['detail'],
  54. 'district' => ($regionId === 0 && !empty($region[2])) ? $region[2] : '',
  55. 'user_id' => $user['user_id'],
  56. 'wxapp_id' => self::$wxapp_id
  57. ]);
  58. // 设为默认收货地址
  59. !$user['address_id'] && $user->save(['address_id' => $this['address_id']]);
  60. return true;
  61. });
  62. }
  63. /**
  64. * 编辑收货地址
  65. * @param $data
  66. * @return false|int
  67. */
  68. public function edit($data)
  69. {
  70. // 整理地区信息
  71. $region = explode(',', $data['region']);
  72. $provinceId = Region::getIdByName($region[0], 1);
  73. $cityId = Region::getIdByName($region[1], 2, $provinceId);
  74. $regionId = Region::getIdByName($region[2], 3, $cityId);
  75. // 验证城市ID是否合法
  76. if (!$this->checkCityId($cityId)) return false;
  77. // 更新收货地址
  78. return $this->allowField(true)->save([
  79. 'name' => $data['name'],
  80. 'phone' => $data['phone'],
  81. 'province_id' => $provinceId,
  82. 'city_id' => $cityId,
  83. 'region_id' => $regionId,
  84. 'detail' => $data['detail'],
  85. 'district' => ($regionId === 0 && !empty($region[2])) ? $region[2] : '',
  86. ]) !== false;
  87. }
  88. /**
  89. * 验证城市ID是否合法
  90. * @param $cityId
  91. * @return bool
  92. */
  93. private function checkCityId($cityId)
  94. {
  95. if ($cityId <= 0) {
  96. \log_write([
  97. 'system_msg' => '选择的城市不存在',
  98. 'param' => \request()->param()
  99. ], 'error');
  100. $this->error = '很抱歉,您选择的城市不存在';
  101. return false;
  102. }
  103. return true;
  104. }
  105. /**
  106. * 设为默认收货地址
  107. * @param User $user
  108. * @return int
  109. */
  110. public function setDefault($user)
  111. {
  112. // 设为默认地址
  113. return $user->save(['address_id' => $this['address_id']]);
  114. }
  115. /**
  116. * 删除收货地址
  117. * @param User $user
  118. * @return int
  119. */
  120. public function remove($user)
  121. {
  122. // 查询当前是否为默认地址
  123. $user['address_id'] == $this['address_id'] && $user->save(['address_id' => 0]);
  124. return $this->delete();
  125. }
  126. /**
  127. * 收货地址详情
  128. * @param $user_id
  129. * @param $address_id
  130. * @return null|static
  131. * @throws \think\exception\DbException
  132. */
  133. public static function detail($user_id, $address_id)
  134. {
  135. return self::get(compact('user_id', 'address_id'));
  136. }
  137. }