UserAddressModel.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <?php
  2. /**
  3. * 我的地址
  4. */
  5. namespace app\common\model;
  6. use think\facade\Db;
  7. use think\Model;
  8. use utils\RedisCache;
  9. class UserAddressModel extends Model
  10. {
  11. protected $name = 'user_address';
  12. /**
  13. * 保存地址
  14. * @param $param
  15. * @return string
  16. */
  17. public function saveUserAddress ($param)
  18. {
  19. self::startTrans();
  20. try {
  21. $data = $param->data;
  22. if (isset($data['is_default']) && $data['is_default'] && $data['is_default'] == 1) {
  23. self::where('uid', $param->uid)->save(['is_default' => 0]);
  24. }
  25. if (isset($data['id']) && $data['id']) { // 修改
  26. $data['mergename'] = $data['area_text'] . $data['remark'];
  27. self::update($data);
  28. } else {
  29. $insert = [
  30. 'remark' => $data['remark'],
  31. 'province' => $data['province'],
  32. 'city' => $data['city'],
  33. 'county' => $data['county'],
  34. 'name' => $data['name'],
  35. 'mobile' => $data['mobile'],
  36. 'is_default' => isset($data['is_default']) ? $data['is_default'] : 0,
  37. ];
  38. $insert['mergename'] = $data['area_text'] . $data['remark'];
  39. $insert['uid'] = $param->uid;
  40. self::insert($insert);
  41. }
  42. RedisCache::keyDel("caches:address:user:u_{$param->uid}_*");
  43. self::commit();
  44. } catch (\Exception $e) {
  45. self::rollback();
  46. return api_error_return('保存失败');
  47. }
  48. return api_succ_return('保存成功');
  49. }
  50. /**
  51. * 设置默认地址
  52. * @param $param
  53. * @return mixed
  54. */
  55. public function setDefaultAddress ($param)
  56. {
  57. self::startTrans();
  58. try {
  59. if (!self::where(['id' => $param->data['id']])->value('id')){
  60. return api_error_return('参数错误');
  61. }
  62. self::where('uid', $param->uid)->save(['is_default' => 0]);
  63. self::where(['id' => $param->data['id'], 'uid' => $param->uid])->save(['is_default' => 1]);
  64. RedisCache::keyDel("caches:address:user:u_{$param->uid}_*");
  65. self::commit();
  66. } catch (\Exception $e) {
  67. self::rollback();
  68. return api_error_return('设置失败');
  69. }
  70. return api_succ_return('设置成功');
  71. }
  72. /**
  73. * 删除地址
  74. * @param $param
  75. * @return string
  76. */
  77. public function delUserAddress ($param)
  78. {
  79. try {
  80. $addressId = isset($param->data['id'])? intval($param->data['id']) : 0;
  81. if (!self::where(['id' => $addressId])->find()){
  82. return api_error_return('参数错误');
  83. }
  84. self::where(['id' => $addressId, 'uid' => $param->uid])->delete();
  85. // 清除缓存
  86. RedisCache::keyDel("caches:address:user:u_{$param->uid}_*");
  87. RedisCache::clear("caches:address:info:{$addressId}");
  88. } catch (\Exception $e) {
  89. return api_error_return('删除失败');
  90. }
  91. return api_succ_return('删除成功');
  92. }
  93. /**
  94. * 获取我的地址
  95. * @param $param
  96. * @return mixed
  97. */
  98. public function getUserAddress ($param, $is_default)
  99. {
  100. try {
  101. $cacheKey = "caches:address:user:u_{$param->uid}_$is_default";
  102. $list = RedisCache::get($cacheKey);
  103. if($list){
  104. return api_succ_return(['msg'=>'获取缓存成功', 'data'=>$list]);
  105. }
  106. $list = self::where('uid', $param->uid)
  107. ->where('is_default', 'in', ($is_default==1?['1']:['1', '0']))
  108. ->order('is_default desc')
  109. ->select();
  110. if (empty($list->toArray())){
  111. return api_succ_return(['msg'=>'获取成功', 'data'=>null]);
  112. }
  113. foreach ($list as $k => $v) {
  114. $list[$k]['area_text'] = Db::name('area')->where('id', 'in', $v['province'] . ',' . $v['city'] . ',' . $v['county'])->value('GROUP_CONCAT(name separator "")');
  115. }
  116. $list = $list->toArray();
  117. RedisCache::set($cacheKey, $list, rand(10, 20));
  118. return api_succ_return(['msg'=>'获取成功', 'data'=> $list]);
  119. } catch (\Exception $e) {
  120. return api_error_return('获取失败');
  121. }
  122. }
  123. /**
  124. * 获取地址信息/或用户默认地址
  125. * @param int $addressId 地址ID,
  126. * @param int $uid 用户ID,无地址ID必传
  127. * @param int $returnDefault 是否返回默认地址
  128. * @return array
  129. */
  130. public static function getAddressIdDetails (int $addressId, $uid=0, $returnDefault=0): array
  131. {
  132. $cacheKey = "caches:address:info:{$addressId}_{$uid}_{$returnDefault}";
  133. $data = RedisCache::get($cacheKey);
  134. if($data){
  135. return $data;
  136. }
  137. $field = 'a.id,a.uid,a.name,a.mobile,a.province, a1.name as sp_province,a.city,a2.name as sp_city,a.county,a3.name as sp_county,a.mergename,a.remark';
  138. $data = self::alias('a')
  139. ->leftJoin('area a1','a1.id=a.province')
  140. ->leftJoin('area a2','a2.id=a.city')
  141. ->leftJoin('area a3','a3.id=a.county')
  142. ->where(function($query) use($addressId, $uid, $returnDefault){
  143. if($uid){
  144. $query->where('a.uid', $uid);
  145. }
  146. if($addressId){
  147. $query->where('a.id', $addressId);
  148. }else if($returnDefault){
  149. $query->where('a.is_default', 1);
  150. }
  151. })
  152. ->field($field)
  153. ->findOrEmpty()->toArray();
  154. if($data){
  155. RedisCache::set($cacheKey, $data, rand(5,10));
  156. }
  157. return $data;
  158. }
  159. }