// // IHRoomHistoryView.swift // Inhealth // // Created by weclouds on 2019/12/16. // Copyright © 2019 weclouds. All rights reserved. // import UIKit protocol IHRoomHistoryViewDelegate { } class IHRoomHistoryView: UIView { var dateType:Int? = 0{ didSet{ if let dateType = self.dateType { self.toolbar.currentDateType = dateType if let updateTime = self.updatetimes{ let first = updateTime.first let last = updateTime.last if self.dateType == nil || self.dateType == 0 { let nowDay = nowTime(nil) let lastDay = getLastDay(nowDay) self.timeRange = "\(lastDay) \(first!)-\(nowDay) \(last!)" }else{ self.timeRange = "\(first!)~\(last!)" } self.details![0] = self.timeRange! } } } } var averageValue:String? = "0"{ didSet{ if let ava = self.averageValue { self.lineChartView.avarageValue = ava self.barchartsView.avarageValue = ava } } } var devID:String? var delegate : IHRoomHistoryViewDelegate? var history :[String]?{ didSet{ if let history = history { self.lineChartView.data = history self.barchartsView.data = history calculateAverageValue() } } } //时间范围 var timeRange:String?{ didSet{ } } var updatetimes:[String]?{ didSet{ if let updateTime = self.updatetimes{ let first = updateTime.first let last = updateTime.last if self.dateType == nil || self.dateType == 0 { let nowDay = nowTime(nil) let lastDay = getLastDay(nowDay) self.timeRange = "\(lastDay) \(first!)-\(nowDay) \(last!)" self.details![0] = self.timeRange! } self.lineChartView.xVals = updateTime self.barchartsView.xVals = updateTime } } } var unit :String?{ didSet{ if let unit = self.unit { self.details![2] = unit self.lineChartView.unit = unit self.barchartsView.unit = unit } } } var devType:String?{ didSet{ if let devType = self.devType { self.toolbar.devType = devType } } } let titles = ["当前选择时间","用电量","数据单位","平均值"] var details :[String]? = ["","","",""]{ didSet{ self.tableView.reloadData() } } lazy var tableView: UITableView = { let tableView = UITableView(frame: CGRect.zero, style: .plain) tableView.dataSource = self tableView.delegate = self tableView.separatorStyle = .none tableView.backgroundColor = .white tableView.register(UINib(nibName: "IHRoomHistoryCell", bundle: nil), forCellReuseIdentifier: "cell") return tableView }() lazy var lineChartView: IHLineChartView = { let lineChartView = IHLineChartView() lineChartView.delegate = self return lineChartView }() lazy var toolbar: IHRoomHistoryToolBar = { let toolBar = IHRoomHistoryToolBar() toolBar.delegate = self return toolBar }() lazy var barchartsView: IHHistoryBarChartView = { let barCharts = IHHistoryBarChartView() barCharts.isHidden = true barCharts.delegate = self // barCharts.backgroundColor = UIColor.red return barCharts }() override init(frame: CGRect) { super.init(frame: frame) addSubview(lineChartView) lineChartView.backgroundColor = .white addSubview(toolbar) addSubview(tableView) addSubview(barchartsView) } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func layoutSubviews() { super.layoutSubviews() lineChartView.snp.makeConstraints { (make) in make.top.right.left.equalToSuperview() make.height.equalTo(270) } barchartsView.snp.makeConstraints { (make) in make.top.right.left.equalToSuperview() make.height.equalTo(270) } toolbar.snp.makeConstraints { (make) in make.right.left.equalToSuperview() make.top.equalTo(lineChartView.snp.bottom) make.height.equalTo(50) } tableView.snp.makeConstraints { (make) in make.bottom.right.left.equalToSuperview() make.top.equalTo(toolbar.snp.bottom) } } //计算 func calculateAverageValue() { var sum:Double = 0 for hisStr in self.history! { let hisDow = Double(hisStr) sum += hisDow! } let avarerage = sum / Double(self.history!.count) let avaStr = String(format: "%.1f", avarerage) self.details![3] = avaStr self.averageValue = avaStr } // MARK: 获取当前时间 // 这里的 type 是指日期的格式 “yyyyMMdd” 或者 “yyyy-MM-dd” 这样子 func nowTime(_ type: String?) -> String { let currentDate = Date() let formatter = DateFormatter() formatter.dateFormat = type ?? "dd/MM/yyyy" let time = formatter.string(from: currentDate) return time } // MARK: 前一天的时间 // nowDay 是传入的需要计算的日期 func getLastDay(_ nowDay: String) -> String { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "dd/MM/yyyy" // 先把传入的时间转为 date let date = dateFormatter.date(from: nowDay) let lastTime: TimeInterval = -(24*60*60) // 往前减去一天的秒数,昨天 // let nextTime: TimeInterval = 24*60*60 // 这是后一天的时间,明天 let lastDate = date?.addingTimeInterval(lastTime) let lastDay = dateFormatter.string(from: lastDate!) return lastDay } override func touchesBegan(_ touches: Set, with event: UIEvent?) { } } extension IHRoomHistoryView:IHRoomHistoryToolBarDelegate{ func roomHistorydidSelectedLeftBarItem(at index: Int) { log.debug("index = \(index)") if index == 0 { lineChartView.chartView!.animate(xAxisDuration: 2) lineChartView.isHidden = false barchartsView.isHidden = true }else{ lineChartView.isHidden = true barchartsView.isHidden = false barchartsView.chartView.animate(yAxisDuration: 2) } } func roomHistorydidSelectedRightBarItem(at index: Int) { if self.devType == "1" || self.devType == "2" || self.devType == "4" { if index == 4 { let format = "yyyy-MM-dd" DatePickerAlertView.show(withDateFormat: format, datePickerMode: .date, selectCompletion: { (fromDate, toDate) in let fromStr = DatePickerAlertView.dateString(with: fromDate, format: format) let toStr = DatePickerAlertView.dateString(with: toDate, format: format) log.debug("fromdate = = \(fromStr), toDate - \(toStr)") let date = "\(fromStr!)/\(toStr!)" let dict = ["index":"\(index)","date":date] NotificationCenter.default.post(name: NSNotification.Name(kNotifactionIHRoomLightHistoryVCtrReloadSegmentViewData), object: dict) }) { (error) in if let error = error{ g_showHUD(error) } } }else{ let dict = ["index":"\(index)","date":""] NotificationCenter.default.post(name: NSNotification.Name(kNotifactionIHRoomLightHistoryVCtrReloadSegmentViewData), object: dict) } }else if self.devType == "3"{ let dict = ["index":"\(index)","date":""] NotificationCenter.default.post(name: NSNotification.Name(kNotifactionIHRoomLightHistoryVCtrReloadSegmentViewData), object: dict) } } } extension IHRoomHistoryView : UITableViewDelegate,UITableViewDataSource{ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 4 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! IHRoomHistoryCell cell.selectionStyle = .none cell.mTitle = titles[indexPath.row] cell.mDetail = details![indexPath.row] return cell } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 66 } } extension IHRoomHistoryView:IHLineChartViewDelegate{ func lineChartDidSelected(_ index: Int) { self.details![0] = self.updatetimes![index] self.details![1] = self.history![index] } func lineChartDeselected() { self.details![0] = self.timeRange! self.details![1] = "" } }