where('user_id', $id)->with([ 'merchant', 'user_phone' ])->first(); if($user){ // 使用DTO而不是直接使用UserOInfo $userDto = UserOInfoDto::fromUserInfo($user); \Illuminate\Support\Facades\Cache::put(self::OInfoKey($user->user_id), $userDto, 60); return $userDto; } return null; } // 如果缓存中的是旧的UserOInfo对象,转换为DTO if ($cache instanceof Unit\UserOInfo) { $cache = UserOInfoDto::fromUserOInfo($cache); } return $cache; } /** * 数据库对象转换为DTO * * @param UserInfo $info 用户详细信息模型 * @return UserOInfoDto 用户订单信息DTO * @deprecated 使用 UserOInfoDto::fromUserInfo() 代替 */ static protected function userInfo2Oinfo(UserInfo $info) { return UserOInfoDto::fromUserInfo($info); } /** * 获取用户订单信息 * * @param array $ids 用户ID数组 * @return array 用户订单信息DTO数组 */ static public function oinfos($ids = []) { if(empty($ids)){ return []; } $ids2 = []; foreach ($ids as $id) { if(empty($id)){ continue; } if(\App\Module\Sys\User::isSysUid($id)){ continue; } $ids2[$id] = $id; } $res = self::infoCaches($ids2); if ($ids2) { /** * @var \App\Module\User\Models\UserInfo[] $users */ $users = \App\Module\User\Models\UserInfo::query()->whereIn('user_id', $ids2)->with([ 'merchant', 'user_phone' ])->get(); foreach ($users as $user) { // 使用DTO而不是直接使用UserOInfo $userDto = UserOInfoDto::fromUserInfo($user); $res[$userDto->userId] = $userDto; \Illuminate\Support\Facades\Cache::put(self::OInfoKey($user->user_id), $userDto, self::$ttl); unset($ids2[$userDto->userId]); } } if (count($ids2)) { foreach ($ids2 as $id) { // 使用DTO而不是直接使用UserPublic $userDto = UserOInfoDto::createDeleted($id); $res[$userDto->userId] = $userDto; \Illuminate\Support\Facades\Cache::put(self::OInfoKey($id), $userDto, self::$ttl); unset($ids2[$userDto->userId]); } } return $res; } protected static function add() { } /** * 获取用户O信息 * * @param int $id 用户ID * @return UserOInfoDto|UserPublicDto|null 用户订单信息DTO或null */ static public function infoCache($id) { $c = \Illuminate\Support\Facades\Cache::get(self::OInfoKey($id)); if ($c) { // 如果缓存中的是旧的UserOInfo对象,转换为DTO if ($c instanceof Unit\UserOInfo) { $c = UserOInfoDto::fromUserOInfo($c); } // 如果缓存中的是旧的UserPublic对象,转换为DTO else if ($c instanceof UserPublic) { $c = UserPublicDto::fromUserPublic($c); } return $c; } return null; } /** * 批量获取用户O信息 * * @param array $ids 用户ID数组 * @return array 用户订单信息DTO数组 */ static public function infoCaches(&$ids) { $res = []; foreach ($ids as $id) { $c = \Illuminate\Support\Facades\Cache::get(self::OInfoKey($id)); if ($c) { // 如果缓存中的是旧的UserOInfo对象,转换为DTO if ($c instanceof Unit\UserOInfo) { $c = UserOInfoDto::fromUserOInfo($c); } // 如果缓存中的是旧的UserPublic对象,转换为DTO else if ($c instanceof UserPublic) { $c = UserPublicDto::fromUserPublic($c); } $res[$id] = $c; unset($ids[$id]); } } return $res; } /** * 用户公共数据缓存key * * @param $uid * @return string */ static private function OInfoKey($uid) { return 'lan_usero4info_' . $uid; } }