同步操作将从 兰德网络O2OA平台软件/O2OA 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
//// O2MainController.swift// O2Platform//// Created by FancyLou on 2019年1月25日.// Copyright © 2019 zoneland. All rights reserved.//import UIKitimport CocoaLumberjackimport O2OA_Auth_SDKimport Starscreamimport AudioToolboxclass O2MainController: UITabBarController, UITabBarControllerDelegate {static var tabBarVC: O2MainController!static func genernateVC() -> O2MainController {// guard let vc = tabBarVC else {// tabBarVC = O2MainController()// return tabBarVC// }// return vcreturn O2MainController()}private var currentIndex: Int = 0// demo服务器弹出公告private var demoAlertView = O2DemoAlertView()private let viewModel: OOLoginViewModel = {return OOLoginViewModel()}()//获取消息数量private lazy var imViewModel: IMViewModel = {return IMViewModel()}()//考勤判断版本private lazy var attendanceViewModel: OOAttandanceViewModel = {return OOAttandanceViewModel()}()override func viewDidLoad() {super.viewDidLoad()if UIDevice.deviceModelReadable() != "Simulator" {self.checkAppVersion()}//self.tabBar.tintColor = O2ThemeManager.color(for: "Base.base_color")!self.delegate = self_initControllers()selectedIndex = 2currentIndex = 2// _loginIM()if O2IsConnect2Collect == false {//处理内部直连的时候推送的设备绑定O2JPushManager.shared.o2JPushBind()}//连接websocketself._startWebsocket()//读取消息self.getConversationList()//检查考勤版本self.checkAttendanceVersion()}deinit {//关闭websocketself._stopWebsocket()}override func viewDidAppear(_ animated: Bool) {// 判断是否 第一次安装 是否是连接的demo服务器if let unit = O2AuthSDK.shared.bindUnit() {if "demo.o2oa.net" == unit.centerHost || "demo.o2oa.io" == unit.centerHost || "demo.o2server.io" == unit.centerHost || "sample.o2oa.net" == unit.centerHost {let tag = AppConfigSettings.shared.demoAlertTagif !tag {demoAlertView.showFallDown()AppConfigSettings.shared.demoAlertTag = true}}}}//MARK: -- delegatefunc tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {self.currentIndex = tabBarController.selectedIndex}private func _initControllers() {//消息// let conversationVC = JCConversationListViewController()let conversationVC = IMConversationListViewController()conversationVC.title = "消息"let messages = ZLNavigationController(rootViewController: conversationVC)messages.tabBarItem = UITabBarItem(title: "消息", image: UIImage(named: "icon_news_nor"), selectedImage: O2ThemeManager.image(for: "Icon.icon_news_pre"))//通讯录let addressVC = OOTabBarHelper.getVC(storyboardName: "contacts", vcName: nil)let address = ZLNavigationController(rootViewController: addressVC)address.tabBarItem = UITabBarItem(title: "通讯录", image: UIImage(named: "icon_address_g"), selectedImage: O2ThemeManager.image(for: "Icon.icon_address_list_pro"))// mainlet mainVC = mainController()mainVC.tabBarItem = UITabBarItem(title: nil, image: UIImage(named: "icon_zhuye_nor"), selectedImage: O2ThemeManager.image(for: "Icon.icon_zhuye_pre"))mainVC.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)let blurImage = OOCustomImageManager.default.loadImage(.index_bottom_menu_logo_blur)let newBlurImage = blurImage?.withRenderingMode(.alwaysOriginal)mainVC.tabBarItem.image = newBlurImagelet focusImage = OOCustomImageManager.default.loadImage(.index_bottom_menu_logo_focus)let newFocusImage = focusImage?.withRenderingMode(.alwaysOriginal)mainVC.tabBarItem.selectedImage = newFocusImage//应用let appsVC = OOTabBarHelper.getVC(storyboardName: "apps", vcName: nil)let apps = ZLNavigationController(rootViewController: appsVC)apps.tabBarItem = UITabBarItem(title: "应用", image: UIImage(named: "icon_yingyong"), selectedImage: O2ThemeManager.image(for: "Icon.icon_yingyong_pro"))//设置let settingsVC = OOTabBarHelper.getVC(storyboardName: "setting", vcName: nil)let settings = ZLNavigationController(rootViewController: settingsVC)settings.tabBarItem = UITabBarItem(title: "设置", image: UIImage(named: "setting_normal"), selectedImage: O2ThemeManager.image(for: "Icon.setting_selected"))self.viewControllers = [messages, address, mainVC, apps, settings]}private func mainController() -> UIViewController {let appid = O2AuthSDK.shared.customStyle()?.indexPortallet indexType = O2AuthSDK.shared.customStyle()?.indexType ?? "default"if indexType == "portal" {let app = DBManager.shared.queryData(appid!)let destVC = OOTabBarHelper.getVC(storyboardName: "apps", vcName: "OOMainWebVC")if let mail = destVC as? MailViewController {mail.app = appmail.isIndexShow = truelet nav = ZLNavigationController(rootViewController: mail)return nav} else {let nav = ZLNavigationController(rootViewController: destVC)return nav}} else {let destVC = OOTabBarHelper.getVC(storyboardName: "task", vcName: nil)let nav = ZLNavigationController(rootViewController: destVC)return nav}}// MARK: - 考勤判断版本private func checkAttendanceVersion() {self.attendanceViewModel.listMyRecords { (result) inswitch result {case .ok(let data):let model = data as? OOMyAttandanceRecordsif let s = model?.scheduleInfos, s.count > 0 {StandDefaultUtil.share.userDefaultCache(value: true as AnyObject, key: O2.O2_Attendance_version_key)DDLogDebug("考勤打卡新版。。。。。。。。。。。。。。。。。。")}else {StandDefaultUtil.share.userDefaultCache(value: false as AnyObject, key: O2.O2_Attendance_version_key)}breakcase .fail(let err):DDLogError(err)StandDefaultUtil.share.userDefaultCache(value: false as AnyObject, key: O2.O2_Attendance_version_key)breakdefault:StandDefaultUtil.share.userDefaultCache(value: false as AnyObject, key: O2.O2_Attendance_version_key)break}}}// MARK: - IM messagefunc getConversationList() {imViewModel.myConversationList().then { (list) invar n = 0if !list.isEmpty {for item in list {if let number = item.unreadNumber {n += number}}}DispatchQueue.main.async {DDLogDebug("消息数量: \(n)")if n > 0 && n < 100 {self.showRedPoint(number: "\(n)")} else if n >= 100 {self.showRedPoint(number: "99..")}}}}private func showRedPoint(number: String) {self.viewControllers?.forEach({ (vc) inif let zl = vc as? ZLNavigationController, zl.tabBarItem?.title == "消息" {zl.tabBarItem.badgeValue = number}})}//消息模块未读消息数量加1private func addUnreadNumber() {self.viewControllers?.forEach({ (vc) inif let zl = vc as? ZLNavigationController, zl.tabBarItem?.title == "消息" {if let badge = zl.tabBarItem.badgeValue {if badge != "99.." {if let n = Int(string: badge) {let number = n + 1if number > 0 && number < 100 {self.showRedPoint(number: "\(number)")} else if number >= 100 {self.showRedPoint(number: "99..")}}}}else {self.showRedPoint(number: "1")}}})}// private func _loginIM() {// viewModel.registerIM().then { (result) in// self.viewModel.loginIM().then({ (result) in// Log.debug(message: "IM登陆完成")// })// }.catch { (imError) in// let error = imError as! OOLoginError// switch error {// case .imRegisterFail(let myErr):// Log.debug(message: myErr.errorDescription!)// self.viewModel.loginIM().then({ (result) in// Log.debug(message: "IM登陆完成")// }).catch({ (loginError) in// Log.error(message: "im Login Error \(loginError)")// })// break// default:// break// }// }// }// MARK: - app updateprivate func checkAppVersion() {O2VersionManager.shared.checkAppUpdate { (info, error) inif let iosInfo = info {DDLogDebug(iosInfo.toJSONString() ?? "")let alertController = UIAlertController(title: "版本更新", message: "更新内容:\(iosInfo.content ?? "")", preferredStyle: .alert)let okAction = UIAlertAction(title: "确定", style: .default, handler: { ok inO2VersionManager.shared.updateAppVersion(info?.downloadUrl)})let cancelAction = UIAlertAction(title: "取消", style: .cancel, handler: { c in//})alertController.addAction(cancelAction)alertController.addAction(okAction)UIApplication.shared.keyWindow?.rootViewController?.present(alertController, animated: true, completion: nil)} else {DDLogInfo("没有版本更新:\(error ?? "")")}}}// MARK: - websocketprivate var timer: Timer?private var isWsOpen = falseprivate func _startWebsocket() {DDLogDebug("启动websocket连接。。。。。。")let url = AppDelegate.o2Collect.generateWebsocketURL()DDLogDebug("这个是wsurl :\(url)")O2WebsocketManager.instance.startConnect(wsUrl: url, delegate: self)}private func _stopWebsocket() {DDLogDebug("关闭websocket连接。。。。。。")self.stopTiming()O2WebsocketManager.instance.closeConnect()}private func startTiming() {DDLogDebug("开启定时器 。。。。。。")if timer != nil {timer?.invalidate()timer = nil}timer = Timer.scheduledTimer(timeInterval: 30, target: self, selector: #selector(sendHeartbeatMsg), userInfo: nil, repeats: true)timer?.fire()}private func stopTiming() {DDLogDebug("关闭定时器 。。。。。。")if timer != nil {timer?.invalidate()timer = nil}}//发送心跳@objc private func sendHeartbeatMsg() {if isWsOpen {O2WebsocketManager.instance.send(msg: o2_im_ws_heartbeat)} else { //重新启动_startWebsocket()}}}extension O2MainController: WebSocketDelegate {func didReceive(event: WebSocketEvent, client: WebSocket) {switch event {case .text(let text):if text != o2_im_ws_heartbeat { //忽略心跳消息DDLogDebug("接收的ws消息:\(text)")//判断type im消息就发送通知do {if let dicArr = try JSONSerialization.jsonObject(with: String(text).data(using: .utf8)!, options: .allowFragments) as? [String: AnyObject] {if let type = dicArr["type"] as? String, type == "im_create" {if let messageInfo = WsMessage.deserialize(from: text) {DDLogDebug("接收到im消息 发送通知。。")NotificationCenter.post(customeNotification: OONotification.websocket, object: messageInfo.body)}self.addUnreadNumber()AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)}}} catch { }}breakcase .connected(let headers):DDLogDebug("websocket is connected: \(headers)")isWsOpen = trueself.startTiming()breakcase .disconnected(let reason, let code):DDLogDebug("websocket is disconnected: \(reason) with code: \(code)")isWsOpen = falsebreakcase .binary(let data):DDLogDebug("Received binary data: \(data.count)")breakcase .ping(_):breakcase .pong(_):breakcase .viablityChanged(_):DDLogDebug("websocket viablityChanged")breakcase .reconnectSuggested(_):DDLogDebug("websocket reconnectSuggested")breakcase .cancelled:DDLogDebug("websocket is canceled")isWsOpen = falsebreakcase .error(let error):DDLogError("websocket is error, \(String(describing: error?.localizedDescription))")isWsOpen = falsebreak}}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。