IHRoomLightHistoryVCtr.swift 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. //
  2. // IHRoomLightHistoryVCtr.swift
  3. // Inhealth
  4. //
  5. // Created by weclouds on 2019/12/16.
  6. // Copyright © 2019 weclouds. All rights reserved.
  7. //
  8. import UIKit
  9. import JXSegmentedView
  10. import PKHUD
  11. let kNotifactionIHRoomLightHistoryVCtrReloadSegmentViewData = "kNotifactionIHRoomLightHistoryVCtrReloadSegmentViewData"
  12. class IHRoomLightHistoryVCtr: UIViewController {
  13. var date_type:Int?
  14. //空气净化器历史数据
  15. var purifierHistroy:PurifierReportData?{
  16. didSet{
  17. if let purifierHistory = self.purifierHistroy {
  18. self.purifierHistoryArr?.removeAll()
  19. self.purifierHistoryArr?.append(purifierHistory.workTimeList!)
  20. self.purifierHistoryArr?.append(purifierHistory.userTimeList!)
  21. }
  22. }
  23. }
  24. //sensor历史数据
  25. var sensorHistory:SensorHistory?{
  26. didSet{
  27. if let history = self.sensorHistory {
  28. self.getSensorArr(history)
  29. }
  30. }
  31. }
  32. //灯控历史数据
  33. var lampHistory :(energy_consumption:ReportData,lighting_use_schedule:ReportData)?{
  34. didSet{
  35. if let lampHistory = self.lampHistory {
  36. //清空原来的
  37. self.lampHistoryArr?.removeAll()
  38. self.lampHistoryArr?.append(lampHistory.energy_consumption)
  39. self.lampHistoryArr?.append(lampHistory.lighting_use_schedule)
  40. }
  41. }
  42. }
  43. var lampHistoryArr : [ReportData]? = [ReportData](){
  44. didSet{
  45. // self.reloadSegmentedView()
  46. }
  47. }
  48. var purifierHistoryArr :[[String]]? = [[String]]()
  49. var devId:String? //
  50. var devType:String? = "1"{
  51. didSet{
  52. if let devType = self.devType {
  53. if devType == "3" {
  54. titles = ["PM2.5","温度","湿度","甲醛","CO2","光照度","噪声"]
  55. }else if devType == "4"{
  56. titles = ["设备工作时间", "过滤时间"]
  57. } else{
  58. titles = ["用电量"]
  59. //隐藏 "灯控使用率"
  60. }
  61. }
  62. }
  63. }
  64. var totalItemWidth: CGFloat = 0 //总长度
  65. var segmentedDataSource:JXSegmentedBaseDataSource?
  66. var segmentedView = JXSegmentedView()
  67. lazy var listContainerView: JXSegmentedListContainerView! = {
  68. return JXSegmentedListContainerView(dataSource: self)
  69. }()
  70. var currentIndex = 0
  71. var sensorUpdatetimeArr :[String]? = [String]()
  72. let sensorUnitArr = ["ug/m3","℃","%RH","mg/m3","ppm","lux","dB"]
  73. let lampUnitArr = ["kWh","H"]
  74. private var sensorHistoryArr:[[String]]? = [[String]]()
  75. var titles :[String]? = ["用电量"]
  76. //隐藏 "灯控使用率"
  77. override func viewDidLoad() {
  78. super.viewDidLoad()
  79. NotificationCenter.default.addObserver(self, selector: #selector(notifyReload(_:)), name: NSNotification.Name(kNotifactionIHRoomLightHistoryVCtrReloadSegmentViewData), object: nil)
  80. cinfigSegmentdView()
  81. }
  82. deinit {
  83. NotificationCenter.default.removeObserver(self)
  84. }
  85. func cinfigSegmentdView() {
  86. self.navigationBarTitle = "历史数据"
  87. totalItemWidth = UIScreen.main.bounds.size.width - 20*2
  88. view.backgroundColor = .white
  89. let titleDataSource = JXSegmentedTitleDataSource()
  90. titleDataSource.itemContentWidth = totalItemWidth/CGFloat(2) - 20
  91. titleDataSource.titles = titles!
  92. titleDataSource.titleNormalFont = UIFont(name: Alibaba_PuHuiTi_Regular, size: 13)!
  93. titleDataSource.titleSelectedFont = UIFont(name: Alibaba_PuHuiTi_Bold, size: 13)!
  94. titleDataSource.isTitleMaskEnabled = true
  95. titleDataSource.titleNormalColor = UIColor(hexString: "#657085")!
  96. titleDataSource.titleSelectedColor = UIColor(hexString: "#FFFFFF")!
  97. titleDataSource.itemSpacing = 0
  98. //titleDataSource.itemContentWidth = 120
  99. // titleDataSource.isItemSpacingAverageEnabled = true
  100. segmentedDataSource = titleDataSource
  101. segmentedView.dataSource = segmentedDataSource
  102. segmentedView.layer.masksToBounds = true
  103. segmentedView.layer.cornerRadius = 15
  104. segmentedView.backgroundColor = UIColor(hexString: "#F6F8F7")
  105. segmentedView.delegate = self
  106. view.addSubview(segmentedView)
  107. let indicator = JXSegmentedIndicatorBackgroundView()
  108. indicator.indicatorHeight = 25
  109. indicator.backgroundWidthIncrement = -10
  110. indicator.indicatorWidth = totalItemWidth/CGFloat(2) - 20
  111. indicator.indicatorColor = UIColor(hexString: "#573F95")!
  112. indicator.layer.shadowColor = UIColor(hexString: "#573F95")!.cgColor
  113. indicator.layer.shadowRadius = 3
  114. indicator.layer.shadowOffset = CGSize.zero
  115. indicator.layer.shadowOpacity = 0.7
  116. segmentedView.indicators = [indicator]
  117. segmentedView.listContainer = listContainerView
  118. view.addSubview(listContainerView)
  119. }
  120. override func viewWillAppear(_ animated: Bool) {
  121. super.viewWillAppear(animated)
  122. //处于第一个item的时候,才允许屏幕边缘手势返回
  123. navigationController?.interactivePopGestureRecognizer?.isEnabled = (segmentedView.selectedIndex == 0)
  124. }
  125. override func viewWillDisappear(_ animated: Bool) {
  126. super.viewWillDisappear(animated)
  127. //离开页面的时候,需要恢复屏幕边缘手势,不能影响其他页面
  128. navigationController?.interactivePopGestureRecognizer?.isEnabled = true
  129. }
  130. override func viewDidLayoutSubviews() {
  131. super.viewDidLayoutSubviews()
  132. segmentedView.frame = CGRect(x: 20, y: 10, width: totalItemWidth, height: 30)
  133. listContainerView.frame = CGRect(x: 0, y: 50, width: view.bounds.size.width, height: view.bounds.size.height - 50)
  134. }
  135. }
  136. extension IHRoomLightHistoryVCtr:JXSegmentedViewDelegate{
  137. func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) {
  138. if let dotDataSource = segmentedDataSource as? JXSegmentedDotDataSource {
  139. //先更新数据源的数据
  140. dotDataSource.dotStates[index] = false
  141. //再调用reloadItem(at: index)
  142. segmentedView.reloadItem(at: index)
  143. }
  144. self.currentIndex = index
  145. navigationController?.interactivePopGestureRecognizer?.isEnabled = (segmentedView.selectedIndex == 0)
  146. }
  147. }
  148. extension IHRoomLightHistoryVCtr:JXSegmentedListContainerViewDataSource{
  149. func numberOfLists(in listContainerView: JXSegmentedListContainerView) -> Int {
  150. return titles!.count
  151. }
  152. func listContainerView(_ listContainerView: JXSegmentedListContainerView, initListAt index: Int) -> JXSegmentedListContainerViewListDelegate {
  153. let vc = IHRoomLightHistoryListVCtr()
  154. vc.devType = self.devType
  155. vc.devId = self.devId
  156. if self.devType == "1" || self.devType == "2" {
  157. let history = self.lampHistoryArr![index]
  158. vc.history = history.dataList
  159. vc.updatetimes = history.timeList
  160. vc.unit = self.lampUnitArr[index]
  161. }else if self.devType == "3"{
  162. vc.history = self.sensorHistoryArr![index]
  163. vc.updatetimes = self.sensorUpdatetimeArr
  164. vc.unit = self.sensorUnitArr[index]
  165. }else if self.devType == "4"{
  166. vc.history = self.purifierHistoryArr![index]
  167. vc.updatetimes = self.purifierHistroy?.timeList
  168. vc.unit = "H"
  169. }
  170. if let date = self.date_type {
  171. vc.date_type = date
  172. }
  173. return vc
  174. }
  175. }
  176. extension IHRoomLightHistoryVCtr{
  177. @objc func notifyReload(_ notif:Notification){
  178. let dict = notif.object as! [String:String]
  179. let index = dict["index"]
  180. let date = dict["date"]
  181. self.date_type = Int(index!)
  182. if self.devType == "1" || self.devType == "2" {
  183. getLampHistory(index!, date: date)
  184. }else if self.devType == "3"{
  185. requestSensorHistory(index!)
  186. }else if self.devType == "4"{
  187. getPurifierHistory(index!, date: date)
  188. }
  189. }
  190. func requestSensorHistory(_ date_type:String) {
  191. HUD.show(.progress)
  192. HUD.hide(afterDelay: 20) { (isSuccess) in
  193. if isSuccess == true{
  194. g_showHUD("请求超时")
  195. }
  196. }
  197. IHSensorService.share.getSensorHistory(self.devId!, date_type: date_type, requestSuccess: { (history) in
  198. HUD.hide()
  199. self.sensorHistory = history
  200. self.reloadSegmentedView()
  201. }) {
  202. g_showHUD("感应器无历史数据")
  203. }
  204. }
  205. //请求sensor历史数据
  206. func getSensorArr(_ history:SensorHistory) {
  207. self.sensorHistoryArr?.removeAll() //清空原来的内容
  208. let pm25 = history.pm25
  209. let temperature = history.temperature
  210. let humidity = history.humidity
  211. let formaldehyde = history.formaldehyde
  212. let co2 = history.co2
  213. let illuminace = history.illuminance
  214. let noise = history.noise
  215. let updateTime = history.updateTime
  216. self.sensorUpdatetimeArr = updateTime
  217. sensorHistoryArr?.append(pm25!)
  218. sensorHistoryArr?.append(temperature!)
  219. sensorHistoryArr?.append(humidity!)
  220. sensorHistoryArr?.append(formaldehyde!)
  221. sensorHistoryArr?.append(co2!)
  222. sensorHistoryArr?.append(illuminace!)
  223. sensorHistoryArr?.append(noise!)
  224. }
  225. //刷新segmentedView 内容
  226. func reloadSegmentedView() {
  227. //默认选择第一个楼层
  228. segmentedDataSource!.dataSource.removeAll()
  229. segmentedView.dataSource = segmentedDataSource
  230. segmentedView.reloadData()
  231. }
  232. func getLampHistory(_ dataType:String,dateType:String,date:String?) {
  233. IHRoomLightService.share.getLampReport(self.devId!, dateType: dateType, dataType: dataType, date: date, requestSuccess: { (data) in
  234. //self.lampHistory = data
  235. }) {
  236. }
  237. }
  238. //请求灯控历史数据
  239. func getLampHistory(_ index:String,date:String?) {
  240. var dateType = "0"
  241. var dateStr = ""
  242. if index == "0" { //天
  243. dateType = "0"
  244. }else if index == "1"{//周
  245. dateType = "4"
  246. }else if index == "2"{//月
  247. dateType = "1"
  248. }else if index == "3"{//年
  249. dateType = "2"
  250. }else if index == "4"{//自定义
  251. dateType = "3"
  252. dateStr = date!
  253. }
  254. HUD.show(.progress)
  255. HUD.hide(afterDelay: 20) { (isSuccess) in
  256. if isSuccess == true{
  257. g_showHUD("请求超时")
  258. }
  259. }
  260. var energy_consumption : ReportData?
  261. var lighting_use_schedule :ReportData?
  262. let queue = DispatchQueue(label: "com.custom.thread", qos: DispatchQoS.default, attributes: DispatchQueue.Attributes.concurrent)
  263. let group = DispatchGroup()
  264. queue.async(group: group, qos: .default, flags: []) {
  265. group.enter()
  266. IHRoomLightService.share.getLampReport(self.devId!, dateType: dateType, dataType: "0", date: dateStr, requestSuccess: { (data) in
  267. group.leave()
  268. energy_consumption = data
  269. }) {
  270. group.leave()
  271. energy_consumption = nil
  272. }
  273. }
  274. queue.async(group: group, qos: .default, flags: []) {
  275. group.enter()
  276. IHRoomLightService.share.getLampReport(self.devId!, dateType: dateType, dataType: "1", date: date, requestSuccess: { (data) in
  277. group.leave()
  278. lighting_use_schedule = data
  279. }) {
  280. group.leave()
  281. lighting_use_schedule = nil
  282. }
  283. }
  284. //回到主线程
  285. group.notify(queue: DispatchQueue.main) {
  286. HUD.hide()
  287. if energy_consumption != nil || lighting_use_schedule != nil{
  288. self.lampHistory?.energy_consumption = energy_consumption!
  289. self.lampHistory?.lighting_use_schedule = lighting_use_schedule!
  290. log.debug("结束了 -- \(self.lampHistory)")
  291. // log.debug("self.lampHistoryArr - \(self.lampHistoryArr)")
  292. self.reloadSegmentedView()
  293. }else{
  294. g_showHUD("无数据")
  295. }
  296. }
  297. }
  298. //请求空气净化器历史数据
  299. func getPurifierHistory(_ index:String,date:String?) {
  300. var dateType = "0"
  301. var dateStr = ""
  302. if index == "0" { //天
  303. dateType = "0"
  304. }else if index == "1"{//周
  305. dateType = "4"
  306. }else if index == "2"{//月
  307. dateType = "1"
  308. }else if index == "3"{//年
  309. dateType = "2"
  310. }else if index == "4"{//自定义
  311. dateType = "3"
  312. dateStr = date!
  313. }
  314. HUD.show(.progress)
  315. HUD.hide(afterDelay: 20) { (isSuccess) in
  316. if isSuccess == true{
  317. g_showHUD("请求超时")
  318. }
  319. }
  320. IHAirService.share.getPurifierReport(self.devId!, dateType: dateType, date: date, requestSuccess: { (history) in
  321. HUD.hide()
  322. self.purifierHistroy = history
  323. self.reloadSegmentedView()
  324. }) {
  325. g_showHUD("无数据")
  326. }
  327. }
  328. }