IHRoomHistoryView.swift 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. //
  2. // IHRoomHistoryView.swift
  3. // Inhealth
  4. //
  5. // Created by weclouds on 2019/12/16.
  6. // Copyright © 2019 weclouds. All rights reserved.
  7. //
  8. import UIKit
  9. protocol IHRoomHistoryViewDelegate {
  10. }
  11. class IHRoomHistoryView: UIView {
  12. var dateType:Int? = 0{
  13. didSet{
  14. if let dateType = self.dateType {
  15. self.toolbar.currentDateType = dateType
  16. if let updateTime = self.updatetimes{
  17. let first = updateTime.first
  18. let last = updateTime.last
  19. if self.dateType == nil || self.dateType == 0 {
  20. let nowDay = nowTime(nil)
  21. let lastDay = getLastDay(nowDay)
  22. self.timeRange = "\(lastDay) \(first!)-\(nowDay) \(last!)"
  23. }else{
  24. self.timeRange = "\(first!)~\(last!)"
  25. }
  26. self.details![0] = self.timeRange!
  27. }
  28. }
  29. }
  30. }
  31. var averageValue:String? = "0"{
  32. didSet{
  33. if let ava = self.averageValue {
  34. self.lineChartView.avarageValue = ava
  35. self.barchartsView.avarageValue = ava
  36. }
  37. }
  38. }
  39. var devID:String?
  40. var delegate : IHRoomHistoryViewDelegate?
  41. var history :[String]?{
  42. didSet{
  43. if let history = history {
  44. self.lineChartView.data = history
  45. self.barchartsView.data = history
  46. calculateAverageValue()
  47. }
  48. }
  49. }
  50. //时间范围
  51. var timeRange:String?{
  52. didSet{
  53. }
  54. }
  55. var updatetimes:[String]?{
  56. didSet{
  57. if let updateTime = self.updatetimes{
  58. let first = updateTime.first
  59. let last = updateTime.last
  60. if self.dateType == nil || self.dateType == 0 {
  61. let nowDay = nowTime(nil)
  62. let lastDay = getLastDay(nowDay)
  63. self.timeRange = "\(lastDay) \(first!)-\(nowDay) \(last!)"
  64. self.details![0] = self.timeRange!
  65. }
  66. self.lineChartView.xVals = updateTime
  67. self.barchartsView.xVals = updateTime
  68. }
  69. }
  70. }
  71. var unit :String?{
  72. didSet{
  73. if let unit = self.unit {
  74. self.details![2] = unit
  75. self.lineChartView.unit = unit
  76. self.barchartsView.unit = unit
  77. }
  78. }
  79. }
  80. var devType:String?{
  81. didSet{
  82. if let devType = self.devType {
  83. self.toolbar.devType = devType
  84. }
  85. }
  86. }
  87. let titles = ["当前选择时间","用电量","数据单位","平均值"]
  88. var details :[String]? = ["","","",""]{
  89. didSet{
  90. self.tableView.reloadData()
  91. }
  92. }
  93. lazy var tableView: UITableView = {
  94. let tableView = UITableView(frame: CGRect.zero, style: .plain)
  95. tableView.dataSource = self
  96. tableView.delegate = self
  97. tableView.separatorStyle = .none
  98. tableView.backgroundColor = .white
  99. tableView.register(UINib(nibName: "IHRoomHistoryCell", bundle: nil), forCellReuseIdentifier: "cell")
  100. return tableView
  101. }()
  102. lazy var lineChartView: IHLineChartView = {
  103. let lineChartView = IHLineChartView()
  104. lineChartView.delegate = self
  105. return lineChartView
  106. }()
  107. lazy var toolbar: IHRoomHistoryToolBar = {
  108. let toolBar = IHRoomHistoryToolBar()
  109. toolBar.delegate = self
  110. return toolBar
  111. }()
  112. lazy var barchartsView: IHHistoryBarChartView = {
  113. let barCharts = IHHistoryBarChartView()
  114. barCharts.isHidden = true
  115. barCharts.delegate = self
  116. // barCharts.backgroundColor = UIColor.red
  117. return barCharts
  118. }()
  119. override init(frame: CGRect) {
  120. super.init(frame: frame)
  121. addSubview(lineChartView)
  122. lineChartView.backgroundColor = .white
  123. addSubview(toolbar)
  124. addSubview(tableView)
  125. addSubview(barchartsView)
  126. }
  127. required init?(coder: NSCoder) {
  128. fatalError("init(coder:) has not been implemented")
  129. }
  130. override func layoutSubviews() {
  131. super.layoutSubviews()
  132. lineChartView.snp.makeConstraints { (make) in
  133. make.top.right.left.equalToSuperview()
  134. make.height.equalTo(270)
  135. }
  136. barchartsView.snp.makeConstraints { (make) in
  137. make.top.right.left.equalToSuperview()
  138. make.height.equalTo(270)
  139. }
  140. toolbar.snp.makeConstraints { (make) in
  141. make.right.left.equalToSuperview()
  142. make.top.equalTo(lineChartView.snp.bottom)
  143. make.height.equalTo(50)
  144. }
  145. tableView.snp.makeConstraints { (make) in
  146. make.bottom.right.left.equalToSuperview()
  147. make.top.equalTo(toolbar.snp.bottom)
  148. }
  149. }
  150. //计算
  151. func calculateAverageValue() {
  152. var sum:Double = 0
  153. for hisStr in self.history! {
  154. let hisDow = Double(hisStr)
  155. sum += hisDow!
  156. }
  157. let avarerage = sum / Double(self.history!.count)
  158. let avaStr = String(format: "%.1f", avarerage)
  159. self.details![3] = avaStr
  160. self.averageValue = avaStr
  161. }
  162. // MARK: 获取当前时间
  163. // 这里的 type 是指日期的格式 “yyyyMMdd” 或者 “yyyy-MM-dd” 这样子
  164. func nowTime(_ type: String?) -> String {
  165. let currentDate = Date()
  166. let formatter = DateFormatter()
  167. formatter.dateFormat = type ?? "dd/MM/yyyy"
  168. let time = formatter.string(from: currentDate)
  169. return time
  170. }
  171. // MARK: 前一天的时间
  172. // nowDay 是传入的需要计算的日期
  173. func getLastDay(_ nowDay: String) -> String {
  174. let dateFormatter = DateFormatter()
  175. dateFormatter.dateFormat = "dd/MM/yyyy"
  176. // 先把传入的时间转为 date
  177. let date = dateFormatter.date(from: nowDay)
  178. let lastTime: TimeInterval = -(24*60*60) // 往前减去一天的秒数,昨天
  179. // let nextTime: TimeInterval = 24*60*60 // 这是后一天的时间,明天
  180. let lastDate = date?.addingTimeInterval(lastTime)
  181. let lastDay = dateFormatter.string(from: lastDate!)
  182. return lastDay
  183. }
  184. override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
  185. }
  186. }
  187. extension IHRoomHistoryView:IHRoomHistoryToolBarDelegate{
  188. func roomHistorydidSelectedLeftBarItem(at index: Int) {
  189. log.debug("index = \(index)")
  190. if index == 0 {
  191. lineChartView.chartView!.animate(xAxisDuration: 2)
  192. lineChartView.isHidden = false
  193. barchartsView.isHidden = true
  194. }else{
  195. lineChartView.isHidden = true
  196. barchartsView.isHidden = false
  197. barchartsView.chartView.animate(yAxisDuration: 2)
  198. }
  199. }
  200. func roomHistorydidSelectedRightBarItem(at index: Int) {
  201. if self.devType == "1" || self.devType == "2" || self.devType == "4" {
  202. if index == 4 {
  203. let format = "yyyy-MM-dd"
  204. DatePickerAlertView.show(withDateFormat: format, datePickerMode: .date, selectCompletion: { (fromDate, toDate) in
  205. let fromStr = DatePickerAlertView.dateString(with: fromDate, format: format)
  206. let toStr = DatePickerAlertView.dateString(with: toDate, format: format)
  207. log.debug("fromdate = = \(fromStr), toDate - \(toStr)")
  208. let date = "\(fromStr!)/\(toStr!)"
  209. let dict = ["index":"\(index)","date":date]
  210. NotificationCenter.default.post(name: NSNotification.Name(kNotifactionIHRoomLightHistoryVCtrReloadSegmentViewData), object: dict)
  211. }) { (error) in
  212. if let error = error{
  213. g_showHUD(error)
  214. }
  215. }
  216. }else{
  217. let dict = ["index":"\(index)","date":""]
  218. NotificationCenter.default.post(name: NSNotification.Name(kNotifactionIHRoomLightHistoryVCtrReloadSegmentViewData), object: dict)
  219. }
  220. }else if self.devType == "3"{
  221. let dict = ["index":"\(index)","date":""]
  222. NotificationCenter.default.post(name: NSNotification.Name(kNotifactionIHRoomLightHistoryVCtrReloadSegmentViewData), object: dict)
  223. }
  224. }
  225. }
  226. extension IHRoomHistoryView : UITableViewDelegate,UITableViewDataSource{
  227. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  228. return 4
  229. }
  230. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  231. let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! IHRoomHistoryCell
  232. cell.selectionStyle = .none
  233. cell.mTitle = titles[indexPath.row]
  234. cell.mDetail = details![indexPath.row]
  235. return cell
  236. }
  237. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  238. return 66
  239. }
  240. }
  241. extension IHRoomHistoryView:IHLineChartViewDelegate{
  242. func lineChartDidSelected(_ index: Int) {
  243. self.details![0] = self.updatetimes![index]
  244. self.details![1] = self.history![index]
  245. }
  246. func lineChartDeselected() {
  247. self.details![0] = self.timeRange!
  248. self.details![1] = ""
  249. }
  250. }