account.swift 7.83 KB
//
//  account.swift
//  ParentAssistant
//
//  Created by 葛建军 on 2018/3/6.
//  Copyright © 2018年 HANGZHOUTEAM. All rights reserved.
//

import Foundation
class AccountManager: NSObject {
    var rawUserInfo:JSON?
    var userid:String=""
    var token:String?
    var refreshToken:String=""
    var address:String = "未知"
    
    
    //单例
    static let shared = AccountManager()
    
    override init(){
        rawUserInfo=Setting.getUserInfo()
        if let info=rawUserInfo{
            userid=info.contentData()["userid"].stringValue
        }
    }
    
    //MARK: - 获取个人信息
    /// 获取用户信息
    ///
    /// - Returns: 返回 UserInfoModel
    func getUserInfo() -> UserInfoModel {
        
        var model = UserInfoModel()
        let dic = Setting.getUserInfo()?.dictionary
        let data = dic!["data"]?.dictionary
        if let value = data {
            model = UserInfoModel.deserialize(from: value)!
        }
        return model
    }
    //MARK: 获取孩子信息
    /// 获取用户孩子信息
    ///
    /// - Returns: 返回 StudentClassInfoModel
    func getChildClassInfo()-> Array<StudentClassInfoModel> {
        var array = Array<StudentClassInfoModel>()
        let dic = Setting.getUserInfo()?.dictionary
        let data = dic!["data"]?.dictionary
        let studentArr = data!["studentClass"]?.arrayValue
        for i in 0..<studentArr!.count {
            let studentDic = studentArr![i].dictionary
            if let value = studentDic {
                let model = StudentClassInfoModel.deserialize(from: value)
                array.append(model!)
            }
        }
        return array
    }
    
    
    func setTokenInfo(tokenInfo:JSON?){
        if let info=tokenInfo{
            token="Bearer "+info["access_token"].stringValue
            refreshToken=info["refresh_token"].stringValue
        }else{
            token=""
        }
    }
    func loadToken()->JSON?{
        if let token=Setting.getJson("_token"){
            return token
        }
        return nil
    }
    func saveToken(tokenInfo:JSON){
        _=Setting.saveJson(tokenInfo, forKey: "_token")
    }
    //是否登录
    func isOnline() -> Bool {
        if id() != "" {
            return true
        }else{
            return false
        }
    }
    func id()->String{
        if let info=rawUserInfo{
            return info.contentData()["userid"].stringValue
        }
        return ""
    }
    func name()->String{
        if let info=rawUserInfo{
            return info.contentData()["name"].stringValue
        }
        return ""
    }
    func photo()->String{
        if let info=rawUserInfo{
            return info.contentData()["image"].stringValue
        }
        return "defphoto"
    }
    func phone()->String{
        if let info=rawUserInfo{
            return info.contentData()["mobile"].stringValue
        }
        return ""
    }
    func sex()->Int{
        if let info=rawUserInfo{
            return info.contentData()["sex"].intValue
        }
        return 0
    }
    
    func parentId()->Int{
        if let info=rawUserInfo{
            return info.contentData()["parentId"].intValue
        }
        return 0
    }
  
    func studentClass()->[JSON]{
        if let info=rawUserInfo{
            return info.contentData()["studentClass"].arrayValue
        }
        return []
    }
    
    func isNew()->Int{
        if let info=rawUserInfo{
            return info.contentData()["isNew"].intValue
        }
        return 0
    }

    func isHeaderTeacher()->Bool{
        if let info=rawUserInfo{
            return info.contentData()["f_Identity"].intValue == 2 ? true : false
        }
        return false
    }
    func logOut(auto:Bool? = false){
        //退出登录
        cleanUserInfoAndPoptoRootVC(auto: auto)
    }
    func cleanUserInfoAndPoptoRootVC(auto:Bool? = false){
        rawUserInfo=nil
        userid=""
        _=Setting.saveUserInfo("")
        UserDefaults.standard.removeObject(forKey: "_token")
        refreshToken = ""
        token = ""
        if auto! {
            if self.appRootViewController().classForCoder==TabBarController.classForCoder(){
                ((self.appRootViewController() as! TabBarController).selectedViewController! as! UINavigationController).popToRootViewController(animated: true)
            }else{
                self.appRootViewController().dismiss(animated: false, completion: {
                    (self.appRootViewController() as! UINavigationController).popToRootViewController(animated: true)
                })
            }
        }
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "loginOutSuccess"), object: nil)
        //取消之前注册的所有本地推送通知
//        UIApplication.shared.cancelAllLocalNotifications()
        //发出刷新首页通知
//        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "refreshFirstVC"), object: nil)
    }
    func appRootViewController()->UIViewController {
        let appRootVC=UIApplication.shared.keyWindow?.rootViewController
        var topVC=appRootVC
        while topVC!.presentedViewController != nil {
            topVC=topVC!.presentedViewController
        }
        return topVC!
    }
    func refreshUserInfo(_ mobile:String,completionHandler:((Bool) -> Void)?){
        HTTPServer.shared.getParentInfo(["mobile":mobile as AnyObject], completionHandler: { (str, error) -> Void in
            if error == nil {
                if JSON.fromString(str)!["status"].intValue==4 {
                    HTTPServer.shared.refreshToken(completionHandler: { (str, error) in
                        if error == nil && JSON.fromString(str)!["status"].intValue==1 {
                            self.setTokenInfo(tokenInfo: JSON.fromString(str))
                            if let call=completionHandler{
                                call(true)
                            }
                        }else{
                            self.logOut()
                            appDelegate.window!.makeToast("登录信息已过期,请重新登录", duration: 2, position: CSToastPositionBottom)
                            if let call=completionHandler{
                                call(false)
                            }
                        }
                    }, token: self.refreshToken)
                }else{
                    httpJsonResule(jsonString: str, error: error, successHandler: { (json) -> Void in
                        _=Setting.saveUserInfo(str)
                        self.rawUserInfo=json
                        self.userid=json.contentData()["userid"].stringValue
                        if let call=completionHandler{
                            call(true)
                        }
                    }, failHandler: { (error) -> Void in
                        if let call=completionHandler{
                            call(false)
                        }
                    })
                }
            }else{
                if let call=completionHandler{
                    call(false)
                }
            }
        })
    }
}

import HandyJSON
class UserInfoModel: HandyJSON {
    var parentId = Int()
    var name = String()
    var bindSchoolFlag = Bool()
    var mobile = String()
    var image = String()
    var userid = String()
    var sex = Int()
    required init(){}
}
class StudentClassInfoModel: HandyJSON {
    
    var photo = String()
    var cityName = String()
    var cardNumber = String()
    var classId = Int()
    var grade = Int()
    var studentName = String()
    var studentCode = String()
    var parentId = Int()
    var className = String()
    var areaName = String()
    var gradename = String()
    var count = Int()
    var schollId = Int()
    var schoolName = String()
    var studentUserId = String()
    var studentId = Int()
    var parentMobile = Int()
    var sex = Int()
    
    required init(){}
}