// // IHRoomLightHistoryVCtr.swift // Inhealth // // Created by weclouds on 2019/12/16. // Copyright © 2019 weclouds. All rights reserved. // import UIKit import JXSegmentedView import PKHUD let kNotifactionIHRoomLightHistoryVCtrReloadSegmentViewData = "kNotifactionIHRoomLightHistoryVCtrReloadSegmentViewData" class IHRoomLightHistoryVCtr: UIViewController { var date_type:Int? //空气净化器历史数据 var purifierHistroy:PurifierReportData?{ didSet{ if let purifierHistory = self.purifierHistroy { self.purifierHistoryArr?.removeAll() self.purifierHistoryArr?.append(purifierHistory.workTimeList!) self.purifierHistoryArr?.append(purifierHistory.userTimeList!) } } } //sensor历史数据 var sensorHistory:SensorHistory?{ didSet{ if let history = self.sensorHistory { self.getSensorArr(history) } } } //灯控历史数据 var lampHistory :(energy_consumption:ReportData,lighting_use_schedule:ReportData)?{ didSet{ if let lampHistory = self.lampHistory { //清空原来的 self.lampHistoryArr?.removeAll() self.lampHistoryArr?.append(lampHistory.energy_consumption) self.lampHistoryArr?.append(lampHistory.lighting_use_schedule) } } } var lampHistoryArr : [ReportData]? = [ReportData](){ didSet{ // self.reloadSegmentedView() } } var purifierHistoryArr :[[String]]? = [[String]]() var devId:String? // var devType:String? = "1"{ didSet{ if let devType = self.devType { if devType == "3" { titles = ["PM2.5","温度","湿度","甲醛","CO2","光照度","噪声"] }else if devType == "4"{ titles = ["设备工作时间", "过滤时间"] } else{ titles = ["用电量"] //隐藏 "灯控使用率" } } } } var totalItemWidth: CGFloat = 0 //总长度 var segmentedDataSource:JXSegmentedBaseDataSource? var segmentedView = JXSegmentedView() lazy var listContainerView: JXSegmentedListContainerView! = { return JXSegmentedListContainerView(dataSource: self) }() var currentIndex = 0 var sensorUpdatetimeArr :[String]? = [String]() let sensorUnitArr = ["ug/m3","℃","%RH","mg/m3","ppm","lux","dB"] let lampUnitArr = ["kWh","H"] private var sensorHistoryArr:[[String]]? = [[String]]() var titles :[String]? = ["用电量"] //隐藏 "灯控使用率" override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector: #selector(notifyReload(_:)), name: NSNotification.Name(kNotifactionIHRoomLightHistoryVCtrReloadSegmentViewData), object: nil) cinfigSegmentdView() } deinit { NotificationCenter.default.removeObserver(self) } func cinfigSegmentdView() { self.navigationBarTitle = "历史数据" totalItemWidth = UIScreen.main.bounds.size.width - 20*2 view.backgroundColor = .white let titleDataSource = JXSegmentedTitleDataSource() titleDataSource.itemContentWidth = totalItemWidth/CGFloat(2) - 20 titleDataSource.titles = titles! titleDataSource.titleNormalFont = UIFont(name: Alibaba_PuHuiTi_Regular, size: 13)! titleDataSource.titleSelectedFont = UIFont(name: Alibaba_PuHuiTi_Bold, size: 13)! titleDataSource.isTitleMaskEnabled = true titleDataSource.titleNormalColor = UIColor(hexString: "#657085")! titleDataSource.titleSelectedColor = UIColor(hexString: "#FFFFFF")! titleDataSource.itemSpacing = 0 //titleDataSource.itemContentWidth = 120 // titleDataSource.isItemSpacingAverageEnabled = true segmentedDataSource = titleDataSource segmentedView.dataSource = segmentedDataSource segmentedView.layer.masksToBounds = true segmentedView.layer.cornerRadius = 15 segmentedView.backgroundColor = UIColor(hexString: "#F6F8F7") segmentedView.delegate = self view.addSubview(segmentedView) let indicator = JXSegmentedIndicatorBackgroundView() indicator.indicatorHeight = 25 indicator.backgroundWidthIncrement = -10 indicator.indicatorWidth = totalItemWidth/CGFloat(2) - 20 indicator.indicatorColor = UIColor(hexString: "#573F95")! indicator.layer.shadowColor = UIColor(hexString: "#573F95")!.cgColor indicator.layer.shadowRadius = 3 indicator.layer.shadowOffset = CGSize.zero indicator.layer.shadowOpacity = 0.7 segmentedView.indicators = [indicator] segmentedView.listContainer = listContainerView view.addSubview(listContainerView) } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) //处于第一个item的时候,才允许屏幕边缘手势返回 navigationController?.interactivePopGestureRecognizer?.isEnabled = (segmentedView.selectedIndex == 0) } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) //离开页面的时候,需要恢复屏幕边缘手势,不能影响其他页面 navigationController?.interactivePopGestureRecognizer?.isEnabled = true } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() segmentedView.frame = CGRect(x: 20, y: 10, width: totalItemWidth, height: 30) listContainerView.frame = CGRect(x: 0, y: 50, width: view.bounds.size.width, height: view.bounds.size.height - 50) } } extension IHRoomLightHistoryVCtr:JXSegmentedViewDelegate{ func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) { if let dotDataSource = segmentedDataSource as? JXSegmentedDotDataSource { //先更新数据源的数据 dotDataSource.dotStates[index] = false //再调用reloadItem(at: index) segmentedView.reloadItem(at: index) } self.currentIndex = index navigationController?.interactivePopGestureRecognizer?.isEnabled = (segmentedView.selectedIndex == 0) } } extension IHRoomLightHistoryVCtr:JXSegmentedListContainerViewDataSource{ func numberOfLists(in listContainerView: JXSegmentedListContainerView) -> Int { return titles!.count } func listContainerView(_ listContainerView: JXSegmentedListContainerView, initListAt index: Int) -> JXSegmentedListContainerViewListDelegate { let vc = IHRoomLightHistoryListVCtr() vc.devType = self.devType vc.devId = self.devId if self.devType == "1" || self.devType == "2" { let history = self.lampHistoryArr![index] vc.history = history.dataList vc.updatetimes = history.timeList vc.unit = self.lampUnitArr[index] }else if self.devType == "3"{ vc.history = self.sensorHistoryArr![index] vc.updatetimes = self.sensorUpdatetimeArr vc.unit = self.sensorUnitArr[index] }else if self.devType == "4"{ vc.history = self.purifierHistoryArr![index] vc.updatetimes = self.purifierHistroy?.timeList vc.unit = "H" } if let date = self.date_type { vc.date_type = date } return vc } } extension IHRoomLightHistoryVCtr{ @objc func notifyReload(_ notif:Notification){ let dict = notif.object as! [String:String] let index = dict["index"] let date = dict["date"] self.date_type = Int(index!) if self.devType == "1" || self.devType == "2" { getLampHistory(index!, date: date) }else if self.devType == "3"{ requestSensorHistory(index!) }else if self.devType == "4"{ getPurifierHistory(index!, date: date) } } func requestSensorHistory(_ date_type:String) { HUD.show(.progress) HUD.hide(afterDelay: 20) { (isSuccess) in if isSuccess == true{ g_showHUD("请求超时") } } IHSensorService.share.getSensorHistory(self.devId!, date_type: date_type, requestSuccess: { (history) in HUD.hide() self.sensorHistory = history self.reloadSegmentedView() }) { g_showHUD("感应器无历史数据") } } //请求sensor历史数据 func getSensorArr(_ history:SensorHistory) { self.sensorHistoryArr?.removeAll() //清空原来的内容 let pm25 = history.pm25 let temperature = history.temperature let humidity = history.humidity let formaldehyde = history.formaldehyde let co2 = history.co2 let illuminace = history.illuminance let noise = history.noise let updateTime = history.updateTime self.sensorUpdatetimeArr = updateTime sensorHistoryArr?.append(pm25!) sensorHistoryArr?.append(temperature!) sensorHistoryArr?.append(humidity!) sensorHistoryArr?.append(formaldehyde!) sensorHistoryArr?.append(co2!) sensorHistoryArr?.append(illuminace!) sensorHistoryArr?.append(noise!) } //刷新segmentedView 内容 func reloadSegmentedView() { //默认选择第一个楼层 segmentedDataSource!.dataSource.removeAll() segmentedView.dataSource = segmentedDataSource segmentedView.reloadData() } func getLampHistory(_ dataType:String,dateType:String,date:String?) { IHRoomLightService.share.getLampReport(self.devId!, dateType: dateType, dataType: dataType, date: date, requestSuccess: { (data) in //self.lampHistory = data }) { } } //请求灯控历史数据 func getLampHistory(_ index:String,date:String?) { var dateType = "0" var dateStr = "" if index == "0" { //天 dateType = "0" }else if index == "1"{//周 dateType = "4" }else if index == "2"{//月 dateType = "1" }else if index == "3"{//年 dateType = "2" }else if index == "4"{//自定义 dateType = "3" dateStr = date! } HUD.show(.progress) HUD.hide(afterDelay: 20) { (isSuccess) in if isSuccess == true{ g_showHUD("请求超时") } } var energy_consumption : ReportData? var lighting_use_schedule :ReportData? let queue = DispatchQueue(label: "com.custom.thread", qos: DispatchQoS.default, attributes: DispatchQueue.Attributes.concurrent) let group = DispatchGroup() queue.async(group: group, qos: .default, flags: []) { group.enter() IHRoomLightService.share.getLampReport(self.devId!, dateType: dateType, dataType: "0", date: dateStr, requestSuccess: { (data) in group.leave() energy_consumption = data }) { group.leave() energy_consumption = nil } } queue.async(group: group, qos: .default, flags: []) { group.enter() IHRoomLightService.share.getLampReport(self.devId!, dateType: dateType, dataType: "1", date: date, requestSuccess: { (data) in group.leave() lighting_use_schedule = data }) { group.leave() lighting_use_schedule = nil } } //回到主线程 group.notify(queue: DispatchQueue.main) { HUD.hide() if energy_consumption != nil || lighting_use_schedule != nil{ self.lampHistory?.energy_consumption = energy_consumption! self.lampHistory?.lighting_use_schedule = lighting_use_schedule! log.debug("结束了 -- \(self.lampHistory)") // log.debug("self.lampHistoryArr - \(self.lampHistoryArr)") self.reloadSegmentedView() }else{ g_showHUD("无数据") } } } //请求空气净化器历史数据 func getPurifierHistory(_ index:String,date:String?) { var dateType = "0" var dateStr = "" if index == "0" { //天 dateType = "0" }else if index == "1"{//周 dateType = "4" }else if index == "2"{//月 dateType = "1" }else if index == "3"{//年 dateType = "2" }else if index == "4"{//自定义 dateType = "3" dateStr = date! } HUD.show(.progress) HUD.hide(afterDelay: 20) { (isSuccess) in if isSuccess == true{ g_showHUD("请求超时") } } IHAirService.share.getPurifierReport(self.devId!, dateType: dateType, date: date, requestSuccess: { (history) in HUD.hide() self.purifierHistroy = history self.reloadSegmentedView() }) { g_showHUD("无数据") } } }