| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475 |
- //
- // 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..<historyArr.count {
-
- let dayData = historyArr[i]
- let his_batteryVoltageMin = dayData[key.his_batteryVoltageMin] as! String
- let his_batteryVoltageMax = dayData[key.his_batteryVoltageMax] as! String
- let his_chargingCurrentMax = dayData[key.his_chargingCurrentMax] as! String
- let his_chargingPowerMax = dayData[key.his_chargingPowerMax] as! String
- let his_chargingAmpereHour = dayData[key.his_chargingAmpereHour] as! String
- let his_dischargeCurrentmax = dayData[key.his_dischargeCurrentmax] as! String
- let his_dischargePowerMax = dayData[key.his_dischargePowerMax] as! String
- let his_dischargeAmpereHour = dayData[key.his_dischargeAmpereHour] as! String
- let his_generationCapacity = dayData[key.his_generationCapacity] as! String
- let his_dischargeCapacity = dayData[key.his_dischargeCapacity] as! String
- let onedata = OneDayData(his_batteryVoltageMin: his_batteryVoltageMin,
- his_batteryVoltageMax: his_batteryVoltageMax,
- his_chargingCurrentMax: his_chargingCurrentMax,
- his_chargingPowerMax: his_chargingPowerMax,
- his_chargingAmpereHour: his_chargingAmpereHour,
- his_dischargeCurrentmax: his_dischargeCurrentmax,
- his_dischargePowerMax: his_dischargePowerMax,
- his_dischargeAmpereHour: his_dischargeAmpereHour,
- his_generationCapacity: his_generationCapacity,
- his_dischargeCapacity: his_dischargeCapacity)
- weekData?.append(onedata)
-
- }
-
- // self.tableView.reloadData()
-
- }
-
- //注册通知、 获取数据
- func notificationRegister() {
- NotificationCenter.default.addObserver(self, selector: #selector(SBTHistoryDataVCtr.uartDataReciveNotify(_:)), name: NSNotification.Name(rawValue: kBabyBluetoothNotificationAllDataRecieve), object: nil)
- //kBabyBluetoothNotificationCumulativeDataRecieve
- NotificationCenter.default.addObserver(self, selector: #selector(SBTHistoryDataVCtr.uartCumulativeDataReciveNotify(_:)), name: NSNotification.Name(rawValue: kBabyBluetoothNotificationCumulativeDataRecieve), object: nil)
-
- NotificationCenter.default.addObserver(self, selector: #selector(updateChuange(_:)), name: NSNotification.Name(kNotifisionDeviceDatailDataHistoryDataRecieve), object: nil)
- NotificationCenter.default.addObserver(self, selector: #selector(refreshStatusNotify(_:)), name: NSNotification.Name(kNotifitionSBTDeviceDetailVCtrRefreshStatus), object: nil)
- }
- //注销通知
- func notificationUnRegister() {
- NotificationCenter.default.removeObserver(self)
- }
-
-
- @objc func refreshStatusNotify(_ notif:Notification) {
- log.debug(notif.userInfo)
- let statusTime = notif.userInfo!["countdown"] as! String //统计倒计时事件
- self.countdown = Int(statusTime)
- isRefresh = true
- if statusTime == "0" {
- isRefresh = false
- }
- }
-
- @objc func updateChuange(_ notif:Notification) {
- log.debug(notif.userInfo)
- // let dataDict = notif.userInfo
-
- // loadUIRefresh(dataDict as! [String : Any])
- loadCumulativeUIRefresh(notif.userInfo as! [String : Any])
-
- }
- //通知事件 --统计数据
- @objc func uartCumulativeDataReciveNotify(_ notify:Notification) {
-
- }
-
- //通知事件
- @objc func uartDataReciveNotify(_ notify:Notification) {
- // loadHisDataUIRefresh()
- }
-
- func loadCumulativeUIRefresh(_ dataDict : [String : Any]) {
- DispatchQueue.main.async {
-
- log.debug("刷新数据 loadCumulativeUIRefresh")
-
- self.weekData?.removeAll()
- self.headerArr?.removeAll()
- // let dataDict = AppShare.cumulativeDataDict
- 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
- self.mStatistics = StatisticsData(totalGenerationCapacity: totalGenerationCapacity, totalDischargeCapacity: totalDischargeCapacity, runTime: runTime, overTimes: overTimes, fullTimes: fullTimes, chargingAmpereHour: chargingAmpereHour, dischargeAmpereHour: dischargeAmpereHour)
- // log.debug("mStatistics = \(mStatistics!)")
- self.headerArr?.append(self.mStatistics!)
-
- let historyArr : [[String : Any]] = dataDict[key.historydatas] as! [[String : Any]]
-
- for i in 0..<historyArr.count {
-
- let dayData = historyArr[i]
- let his_batteryVoltageMin = dayData[key.his_batteryVoltageMin] as! String
- let his_batteryVoltageMax = dayData[key.his_batteryVoltageMax] as! String
- let his_chargingCurrentMax = dayData[key.his_chargingCurrentMax] as! String
- let his_chargingPowerMax = dayData[key.his_chargingPowerMax] as! String
- let his_chargingAmpereHour = dayData[key.his_chargingAmpereHour] as! String
- let his_dischargeCurrentmax = dayData[key.his_dischargeCurrentmax] as! String
- let his_dischargePowerMax = dayData[key.his_dischargePowerMax] as! String
- let his_dischargeAmpereHour = dayData[key.his_dischargeAmpereHour] as! String
- let his_generationCapacity = dayData[key.his_generationCapacity] as! String
- let his_dischargeCapacity = dayData[key.his_dischargeCapacity] as! String
- let onedata = OneDayData(his_batteryVoltageMin: his_batteryVoltageMin,
- his_batteryVoltageMax: his_batteryVoltageMax,
- his_chargingCurrentMax: his_chargingCurrentMax,
- his_chargingPowerMax: his_chargingPowerMax,
- his_chargingAmpereHour: his_chargingAmpereHour,
- his_dischargeCurrentmax: his_dischargeCurrentmax,
- his_dischargePowerMax: his_dischargePowerMax,
- his_dischargeAmpereHour: his_dischargeAmpereHour,
- his_generationCapacity: his_generationCapacity,
- his_dischargeCapacity: his_dischargeCapacity)
- self.weekData?.append(onedata)
-
- }
- self.tableView.reloadData()
-
- // self.tableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: UITableView.RowAnimation.fade)
- }
-
- }
-
- }
- //MARK action method
- extension SBTHistoryDataVCtr{
- }
- extension SBTHistoryDataVCtr: UITableViewDataSource,UITableViewDelegate{
-
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> 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)
-
- }
- }
|