CNLiveConfigUserInfo.swift 7.29 KB
//
//  CNLiveConfigUserInfo.swift
//  metaCode
//
//  Created by open on 2023/6/6.
//

import Foundation
import UIKit
import HandyJSON

class UserInfoModel: BaseModel {
    
    required init() {}
    
    var appId:String = ""
    var appleUid:String = ""
    var bigFaceUrl:String = ""
    var birthday:String = ""
    var countryCode:String = ""
    var email:String = ""
    var extInfo:String = ""
    var faceUrl:String = ""
    var frmId:String = ""
    var gender:String = ""
    var hUid:String = ""
    var isNewUser:String = ""
    var location:String = ""
    var mobile:String = ""
    var newAccount:String = ""
    var nickName:String = ""
    var platformId:String = ""
    var qqUid:String = ""
    var renrenUid:String = ""
    var sinaUid:String = ""
    var token:String = ""
    var uid:String = ""
    var wxUid:String = ""
    var access_token:String = ""
    var expires_in:String = ""//过期时间
    
    override func mapping(mapper: HelpingMapper) {

        mapper <<<
            self.gender <-- TransformOf(fromJSON: { (rawString) -> String? in
                
                if let _str = rawString {
                    
                    if _str == "m" || _str == "男"  {
                        return "男"
                    }
                    if _str == "f" || _str == "女" {
                        return "女"
                    }
                }
                return "未知"
            }, toJSON: { (srcString) -> String? in
                return srcString
            })
    }
}

class UserInfoManager: NSObject {
    
    static let shared = UserInfoManager()
    
    fileprivate var _userInfo : UserInfoModel?
    private(set) var userInfo: UserInfoModel {
        
        set {
            _userInfo = newValue
        }
        
        get {
            if _userInfo != nil && (_userInfo?.uid.count)! > 0 {
                return _userInfo!
            }
            return UserInfoManager.readUserInfo()
        }
    }
    
    private override init() {}

    /// 缓存用户数据
    /// - Parameter userInfo: 用户数据 存储字符串
    static public func cacheUserInfo(userInfo: UserInfoModel) {
        UserInfoManager.clearUserInfo()
        UserInfoManager.shared._userInfo = userInfo
        //JsonUtil.modelToJson(userInfo)
        UserDefaults.standard.set(userInfo.toJSONString(), forKey: "mateCode_userInfo")
        if UserDefaults.standard.synchronize() {
            print("用户信息存储成功")
        }
    }
    
    /// 读取用户数据
    /// - Returns: 用户数据
    static public func readUserInfo() -> UserInfoModel {
        let user_info = UserDefaults.standard.object(forKey: "mateCode_userInfo")
        if user_info == nil && (user_info as! String).count == 0 {
            print("获取用户信息失败")
            return UserInfoModel()
        }
        let userInfo = jsonToModel(user_info as! String, UserInfoModel.self) as! UserInfoModel
        UserInfoManager.shared._userInfo = userInfo
        return userInfo
    }
    
    static public func clearUserInfo() {
        UserDefaults.standard.removeObject(forKey: "mateCode_userInfo")
        UserInfoManager.shared._userInfo = nil
        StandSortManager.removeStandSort()
        if UserDefaults.standard.synchronize() {
            print("用户信息删除成功")
        }
    }
}

class StandSortManager: NSObject {
    
    static let shared = StandSortManager()
    
    //根据用户信息设置key
    static let sort_key: String = "mateCode_stand_sort_key_"+UserInfoManager.shared.userInfo.uid
    fileprivate var _indexs : Array<String>?
    private(set) var indexs: Array<String> {
        set {
            _indexs = newValue
        }
        
        get {
            return []
        }
    }
    
    /// 存储排序信息
    /// - Parameter indexs: 排序的index
    static private func cacheStandSort(indexs: NSArray) {
        StandSortManager.shared._indexs = indexs as? Array<String>
        UserDefaults.standard.set(indexs, forKey: sort_key)
        if UserDefaults.standard.synchronize() {
            print("排序信息存储成功")
        }
    }
    
    /// 获取排序信息
    /// - Returns: 返回信息
    static private func readStandSort() -> NSArray {
        let indexs = UserDefaults.standard.object(forKey: sort_key)
        if indexs == nil && (indexs as! NSArray).count == 0 {
            print("获取排序信息失败")
            return []
        }
        StandSortManager.shared._indexs = indexs as? Array<String>
        return indexs as! NSArray
    }
    
    /// 移除排序信息
    static public func removeStandSort() {
        UserDefaults.standard.removeObject(forKey: sort_key)
        StandSortManager.shared._indexs = []
        if UserDefaults.standard.synchronize() {
            print("排序信息删除成功")
        }
    }
    
    /// 对获取到的全部数据进行排序
    /// - Parameter stands: 获取到的数据
    /// - Returns: 返回  //<StandListModel>
    static public func sortAllListData(stands: NSArray) -> NSArray {
        let have_id_auths = StandSortManager.readStandSort()
        if have_id_auths.count == 0 {
            return stands
        }
        print("allList接口里面===>\(have_id_auths)")
        let have_auths = NSMutableArray()
        let no_auths = NSMutableArray()
        for item in stands {
            let listModel = item as! StandListModel
            //这里需要及时去刷新认证状态  如果没有及时刷新这里回出现已经认证的状态不会进行排序
            listModel.auth && have_id_auths.contains(listModel.id)  ? have_auths.add(listModel) : no_auths.add(listModel)
        }
        let tempArray = NSMutableArray()
        for item in have_auths {
            let standModel = item as! StandListModel
            let old_index = have_auths.index(of: standModel)
            let new_index = have_id_auths.index(of: standModel.id)
            if old_index != new_index {
                swap(&have_auths[new_index], &have_auths[old_index])
            }
        }
        tempArray.addObjects(from: have_auths as! [Any])
        tempArray.addObjects(from: no_auths as! [Any])
        return tempArray
    }
    
    
    /// 对已经获取到的认证身份进行排序
    /// - Parameter auths: 获取到的数据
    /// - Returns: 返回  //<MineAuthListModel>
    static public func sortMyListData(auths: NSArray) -> NSArray {
        let have_id_auths = StandSortManager.readStandSort()
        if have_id_auths.count == 0 {
            return auths
        }
        print("myList接口里面===>\(have_id_auths)")
        let have_auths = NSMutableArray.init(array: auths)
        for item in auths {
            let standModel = item as! MineAuthListModel
            let old_index = have_auths.index(of: standModel)
            let new_index = have_id_auths.index(of: standModel.identityId)
            if old_index != new_index {
                swap(&have_auths[new_index], &have_auths[old_index])
            }
        }
        return have_auths
    }
    
    /// 更新之后重新插入
    /// - Parameter indexs: 所以
    static public func insertSortData(indexs: NSArray) {
        if (indexs.count > 0) {
            StandSortManager.shared._indexs = []
            StandSortManager.removeStandSort()
            StandSortManager.cacheStandSort(indexs: indexs)
        }
    }
    
}