| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384 | ////  IHRoomLightHistoryVCtr.swift//  Inhealth////  Created by weclouds on 2019/12/16.//  Copyright © 2019 weclouds. All rights reserved.//import UIKitimport JXSegmentedViewimport PKHUDlet 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("无数据")        }    }}
 |