// // SBTHistoryDataVCtr.swift // SolarBT // // Created by weclouds on 2019/2/1. // Copyright © 2019 weclouds. All rights reserved. // import UIKit import PKHUD //统计数据 struct StatisticsData { var totalGenerationCapacity :String? // 累计发电量 var totalDischargeCapacity :String? //累计放电量 var runTime :String? // 总运行天数 var overTimes :String? //过放次数 var fullTimes :String?//充满次数 var chargingAmpereHour :String? // 充电安时数 var dischargeAmpereHour :String?// 放电安时数 } struct OneDayData { var his_batteryVoltageMin :String? // 蓄电池最低电压 var his_batteryVoltageMax :String? // 蓄电池最高电压 var his_chargingCurrentMax :String?// 充电最大电流 var his_chargingPowerMax :String? // 充电最大功率 var his_chargingAmpereHour :String? // 充电安时数 var his_dischargeCurrentmax:String? // 放电最大电流 var his_dischargePowerMax :String? // 放电最大功率 var his_dischargeAmpereHour :String? // 放电安时数 var his_generationCapacity:String? // 发电量 var his_dischargeCapacity :String?// 充电量 } class SBTHistoryDataVCtr: UIViewController { var isRefresh : Bool? = false var countdown : Int? = 0 var isOld :Bool? /// var uartCommandTimer : Timer? // 定时器 var belKey:String? var deviceName:String? // 设备名称 var isDemo:Bool? = false var weekData : [OneDayData]? = [OneDayData]()//一周数据 var mStatistics : StatisticsData? var headerArr : [StatisticsData]? = [StatisticsData]() var isChange :Bool? lazy var tableView: UITableView = { let tableView = UITableView(frame: CGRect(x: 0, y: 0, width: KSCREENWIDTH, height: KSCREENHEIGHT - KNavBarHeight - 49 ), style: .plain) tableView.delegate = self tableView.dataSource = self tableView.separatorStyle = .none tableView.register(SBTHistoryHeaderCell.self, forCellReuseIdentifier: "header") tableView.register(SBTHistoryDataCell.self, forCellReuseIdentifier: "data") return tableView }() } //MARK:生命周期 extension SBTHistoryDataVCtr{ override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) if self.isDemo == false { notificationRegister() } BabyBluetoothSwift.shareInstance()?.clearHistoryDataBlock = { (dataDict) in g_showHUD("clear_history_success".da_localizedStr()) } // initData() } override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) if self.isDemo == false { notificationUnRegister() //停止定时器 } } override func viewDidLoad() { super.viewDidLoad() self.isChange = false if self.isDemo == true { initData(SBTData().DemoData) }else{ let plist = CLDeviceDataPlist() let dataDict = plist.findData(deviceDetailPlist, key: self.belKey!) initData(dataDict as! [String : Any]) } let buttonSelected = UserDefaults.standard.value(forKey: SBTHistoryDataChartOrFormSelected) as? String //log.debug("表格柱状图切换----\(buttonSelected)") if buttonSelected == nil || buttonSelected == "0"{ // cell.toolButtonSelectedIndex = "0" self.isChange = false }else{ self.isChange = true // cell.toolButtonSelectedIndex = buttonSelected } createUI() } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) } } //MARK : 定时器 extension SBTHistoryDataVCtr{ } //MARK: CreateUI extension SBTHistoryDataVCtr{ func createUI() { self.view.addSubview(self.tableView) } func initData(_ dataDict: [String:Any]) { weekData?.removeAll() self.headerArr?.removeAll() let key = DeviceDictKey() let totalGenerationCapacity = dataDict[key.generatEnergyTotal] as! String let totalDischargeCapacity = dataDict[key.usedEnergyTotal] as! String let runTime = dataDict[key.runTime] as! String let overTimes = dataDict[key.overTimes] as! String let fullTimes = dataDict[key.fullTimes] as! String let chargingAmpereHour = dataDict[key.chargingAmpereHour] as! String let dischargeAmpereHour = dataDict[key.dischargeAmpereHour] as! String mStatistics = StatisticsData(totalGenerationCapacity: totalGenerationCapacity, totalDischargeCapacity: totalDischargeCapacity, runTime: runTime, overTimes: overTimes, fullTimes: fullTimes, chargingAmpereHour: chargingAmpereHour, dischargeAmpereHour: dischargeAmpereHour) // log.debug("mStatistics = \(mStatistics!)") self.headerArr?.append(mStatistics!) let historyArr : [[String : Any]] = dataDict[key.historydatas] as! [[String : Any]] for i in 0.. Int { return 2 } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { if indexPath.row == 0{ return 205 } else{ if isChange! == true { return 356 + 50 } return 510 + 50 } } //缓存高度 这个 跟定时器一起使用,很有用 真香 func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { if indexPath.row == 0{ return 205 } else{ if isChange! == true { return 356 + 50 } return 510 + 50 } } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { if indexPath.row == 0 { let cell = SBTHistoryHeaderCell(style: .default, reuseIdentifier: "header") //这里不能做复用 cell.fillCellData(self.headerArr![indexPath.row]) cell.selectionStyle = .none return cell } else{ let cell : SBTHistoryDataCell = SBTHistoryDataCell(style: .default, reuseIdentifier: "data") /// log.debug("+++++++++++++++=刷新数据 -- \(self.weekData)") let buttonSelected = UserDefaults.standard.value(forKey: SBTHistoryDataChartOrFormSelected) as? String if buttonSelected == nil{ cell.toolButtonSelectedIndex = "0" }else{ cell.toolButtonSelectedIndex = buttonSelected } cell.fillCellData(self.weekData!) cell.selectionStyle = .none cell.changeViewCallBack = {(isChartsView) in log.debug("changeViewCallBack --\(isChartsView)") if isChartsView{ self.isChange = true self.tableView.reloadData() }else{ self.isChange = false self.tableView.reloadData() } } cell.shareCallback = {(chartView) in // log.debug("share") let shotView = SBTScreenShootView(frame: CGRect(x: 0, y: 0, width: KSCREENHEIGHT, height: KSCREENWIDTH )) shotView.fillChartsData(self.weekData!) let image = self.screenShotView(view: shotView) let imageView = UIImageView(image: image) imageView.frame = self.view.bounds // self.view.addSubview(imageView); } cell.shareFormViewCallback = { let shotView = SBTFormShotView(frame: CGRect(x: 0, y: 0, width: 540, height: 510)) shotView.fillCellData(self.weekData!) let image = self.screenShotView(view: shotView) let imageView = UIImageView(image: image) imageView.frame = self.view.bounds } cell.horizontalScreenCallback = {() in let vc = SBTHorizontalScreenVCtr() vc.fillChartsData(self.weekData!) AppShare.isTimarStop = true self.navigationController?.pushViewController(vc) } cell.clearHistoryDataCallBack = {() in let alert = UIAlertController(title: "Clear_the_historical?".da_localizedStr(), message: nil , preferredStyle: .alert) let confirmAction = UIAlertAction(title: "Yes".da_localizedStr(), style:.destructive) { (action) in if self.isDemo == true{ g_showHUD("Current_demo_data".da_localizedStr()) }else{ NotificationCenter.default.post(name: NSNotification.Name(rawValue: kNotifitionSBTDeviceDetaiVCtrRealTimerStop), object: nil) NotificationCenter.default.post(name: NSNotification.Name(rawValue: kNotifitionSBTDeviceDetaiVCtrHistoryTimerStop), object: nil) self.sendclearHistory() } } let cancelAction = UIAlertAction(title: "No".da_localizedStr(), style: .cancel, handler: nil) alert.addAction(cancelAction) alert.addAction(confirmAction) self.present(alert, animated: true, completion: nil) } return cell } } func sendclearHistory() { log.debug("延时时间 -- \(self.countdown) ") let alert = SBTReadLoadingVCtr(nibName: "SBTReadLoadingVCtr", bundle: nil) let plist = CLDeviceDataPlist() let key = DeviceDictKey() let dataDict1 = plist.findData(deviceDetailPlist, key: self.belKey!) var productName = " " if self.isOld == true { productName = "" }else{ productName = dataDict1![key.productName] as! String } alert.deviceName = productName alert.message = "Clearing_historical".da_localizedStr() alert.show() var arr = [String]() if self.isOld == true { arr = ["FF7900000001"] }else{ arr = ["FF06DF050001"] } BabyBluetoothSwift.shareInstance()?.writeData2222(arr, completionHandler: { (result) in alert.dismiss() g_showHUD("clear_history_success".da_localizedStr()) NotificationCenter.default.post(name: NSNotification.Name(kNotifitionSBTDeviceDetaiVCtrHistoryTimerStart), object: nil) }) } @objc func readHistoryCallback() { NotificationCenter.default.post(name: NSNotification.Name(rawValue: kNotifitionSBTDeviceDetaiVCtrSendHistory), object: nil) } //传入需要截取的view func screenShotView(view: UIView) -> UIImage { let imageRet : UIImage UIGraphicsBeginImageContextWithOptions(view.frame.size, false, 0.0) view.layer.render(in: UIGraphicsGetCurrentContext()!) imageRet = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() //保存相册,可以去相册验证截图是否是你想要的 (方法同上) // UIImageWriteToSavedPhotosAlbum(imageRet, self, #selector(image(image:didFinishSavingWithError:contextInfo:)), nil) sendImage(imageRet) return imageRet } @objc func image(image:UIImage,didFinishSavingWithError error:NSError?,contextInfo:AnyObject) { if error != nil { print("保存失败 ---\(error)") } else { print("保存成功") //sendImage(image) } } func sendImage(_ image:UIImage) { let items = [image] let activityVC = UIActivityViewController(activityItems: items, applicationActivities: nil) activityVC.completionWithItemsHandler = {(activity,success,item,error) in log.debug("activity --\(activity) --- successs - \(success),item-- \(item) --- error- \(error)") if success == true { // g_showHUD("分享成功") }else{ } } self.present(activityVC, animated: true, completion: nil) } }