data; if (isset($data['is_default']) && $data['is_default'] && $data['is_default'] == 1) { self::where('uid', $param->uid)->save(['is_default' => 0]); } if (isset($data['id']) && $data['id']) { // 修改 $data['mergename'] = $data['area_text'] . $data['remark']; self::update($data); } else { $insert = [ 'remark' => $data['remark'], 'province' => $data['province'], 'city' => $data['city'], 'county' => $data['county'], 'name' => $data['name'], 'mobile' => $data['mobile'], 'is_default' => isset($data['is_default']) ? $data['is_default'] : 0, ]; $insert['mergename'] = $data['area_text'] . $data['remark']; $insert['uid'] = $param->uid; self::insert($insert); } RedisCache::keyDel("caches:address:user:u_{$param->uid}_*"); self::commit(); } catch (\Exception $e) { self::rollback(); return api_error_return('保存失败'); } return api_succ_return('保存成功'); } /** * 设置默认地址 * @param $param * @return mixed */ public function setDefaultAddress ($param) { self::startTrans(); try { if (!self::where(['id' => $param->data['id']])->value('id')){ return api_error_return('参数错误'); } self::where('uid', $param->uid)->save(['is_default' => 0]); self::where(['id' => $param->data['id'], 'uid' => $param->uid])->save(['is_default' => 1]); RedisCache::keyDel("caches:address:user:u_{$param->uid}_*"); self::commit(); } catch (\Exception $e) { self::rollback(); return api_error_return('设置失败'); } return api_succ_return('设置成功'); } /** * 删除地址 * @param $param * @return string */ public function delUserAddress ($param) { try { $addressId = isset($param->data['id'])? intval($param->data['id']) : 0; if (!self::where(['id' => $addressId])->find()){ return api_error_return('参数错误'); } self::where(['id' => $addressId, 'uid' => $param->uid])->delete(); // 清除缓存 RedisCache::keyDel("caches:address:user:u_{$param->uid}_*"); RedisCache::clear("caches:address:info:{$addressId}"); } catch (\Exception $e) { return api_error_return('删除失败'); } return api_succ_return('删除成功'); } /** * 获取我的地址 * @param $param * @return mixed */ public function getUserAddress ($param, $is_default) { try { $cacheKey = "caches:address:user:u_{$param->uid}_$is_default"; $list = RedisCache::get($cacheKey); if($list){ return api_succ_return(['msg'=>'获取缓存成功', 'data'=>$list]); } $list = self::where('uid', $param->uid) ->where('is_default', 'in', ($is_default==1?['1']:['1', '0'])) ->order('is_default desc') ->select(); if (empty($list->toArray())){ return api_succ_return(['msg'=>'获取成功', 'data'=>null]); } foreach ($list as $k => $v) { $list[$k]['area_text'] = Db::name('area')->where('id', 'in', $v['province'] . ',' . $v['city'] . ',' . $v['county'])->value('GROUP_CONCAT(name separator "")'); } $list = $list->toArray(); RedisCache::set($cacheKey, $list, rand(10, 20)); return api_succ_return(['msg'=>'获取成功', 'data'=> $list]); } catch (\Exception $e) { return api_error_return('获取失败'); } } /** * 获取地址信息/或用户默认地址 * @param int $addressId 地址ID, * @param int $uid 用户ID,无地址ID必传 * @param int $returnDefault 是否返回默认地址 * @return array */ public static function getAddressIdDetails (int $addressId, $uid=0, $returnDefault=0): array { $cacheKey = "caches:address:info:{$addressId}_{$uid}_{$returnDefault}"; $data = RedisCache::get($cacheKey); if($data){ return $data; } $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'; $data = self::alias('a') ->leftJoin('area a1','a1.id=a.province') ->leftJoin('area a2','a2.id=a.city') ->leftJoin('area a3','a3.id=a.county') ->where(function($query) use($addressId, $uid, $returnDefault){ if($uid){ $query->where('a.uid', $uid); } if($addressId){ $query->where('a.id', $addressId); }else if($returnDefault){ $query->where('a.is_default', 1); } }) ->field($field) ->findOrEmpty()->toArray(); if($data){ RedisCache::set($cacheKey, $data, rand(5,10)); } return $data; } }