SBTHistoryDataCell.swift 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436
  1. //
  2. // SBTHistoryDataCell.swift
  3. // SolarBT
  4. //
  5. // Created by weclouds on 2019/3/4.
  6. // Copyright © 2019 weclouds. All rights reserved.
  7. //
  8. import UIKit
  9. let SBTHistoryDataChartOrFormSelected = "SBTHistoryDataChartOrFormSelected"
  10. class SBTHistoryDataCell: UITableViewCell {
  11. var weekData : [OneDayData]? {
  12. didSet{
  13. if let arr = self.weekData {
  14. for i in 0..<arr.count {
  15. let oneDay = arr[i]
  16. var aDataArr : [String]? = [String]()
  17. let his_batteryVoltageMin = oneDay.his_batteryVoltageMin// 蓄电池最低电压
  18. let his_batteryVoltageMax = oneDay.his_batteryVoltageMax// 蓄电池最高电压
  19. let his_chargingCurrentMax = oneDay.his_chargingCurrentMax// 充电最大电流
  20. let his_chargingPowerMax = oneDay.his_chargingPowerMax// 充电最大功率
  21. let his_chargingAmpereHour = oneDay.his_chargingAmpereHour // 充电安时数
  22. let his_dischargeCurrentmax = oneDay.his_dischargeCurrentmax // 放电最大电流
  23. let his_dischargePowerMax = oneDay.his_dischargePowerMax// 放电最大功率
  24. let his_dischargeAmpereHour = oneDay.his_dischargeAmpereHour // 放电安时数
  25. let his_generationCapacity = oneDay.his_generationCapacity // 发电量
  26. let his_dischargeCapacity = oneDay.his_dischargeCapacity// 充电量
  27. aDataArr?.append(his_batteryVoltageMin!)
  28. aDataArr?.append(his_batteryVoltageMax!)
  29. aDataArr?.append(his_chargingCurrentMax!)
  30. aDataArr?.append(his_chargingPowerMax!)
  31. aDataArr?.append(his_chargingAmpereHour!)
  32. aDataArr?.append(his_dischargeCurrentmax!)
  33. aDataArr?.append(his_dischargePowerMax!)
  34. aDataArr?.append(his_dischargeAmpereHour!)
  35. aDataArr?.append(his_generationCapacity!)
  36. aDataArr?.append(his_dischargeCapacity!)
  37. //self.dataArr?.append(aDataArr!)
  38. log.debug("一周数据 : \(self.dataArr!)")
  39. }
  40. }
  41. }
  42. }
  43. var dataArr : [[String]]? = [[String]]() {
  44. didSet{
  45. }
  46. }
  47. var toolButtonSelectedIndex:String? = "0"{
  48. didSet{
  49. if let toolButtonSelected = self.toolButtonSelectedIndex {
  50. if toolButtonSelected == "0"{
  51. formBtn.isSelected = true
  52. barChartBtn.isSelected = false
  53. scaleBtn.isHidden = true
  54. formView.isHidden = false
  55. chartsView.isHidden = true
  56. }else if toolButtonSelected == "1"{
  57. formBtn.isSelected = false
  58. barChartBtn.isSelected = true
  59. scaleBtn.isHidden = false
  60. formView.isHidden = true
  61. chartsView.isHidden = false
  62. }
  63. }
  64. }
  65. }
  66. var dayArr :[String]? // 日期数组
  67. // 0 formView 1 chartsView
  68. var clearHistoryDataCallBack :(()->Void)?
  69. var changeViewCallBack:((Bool)->Void)?
  70. var shareFormViewCallback: (()->Void)?
  71. var shareCallback:((SBTChartsView)->Void)?
  72. var horizontalScreenCallback : (()->Void)?
  73. lazy var toolBox: UIView = {
  74. let toolBox = UIView(frame: CGRect(x: 0, y: 0, width: KSCREENWIDTH, height: 50))
  75. toolBox.backgroundColor = UIColor(hexString: "F6F6F6")
  76. return toolBox
  77. }()
  78. lazy var formBtn: UIButton = {
  79. let formBtn = UIButton(type: .custom)
  80. formBtn.setTitle("Form".da_localizedStr(), for: .normal)
  81. formBtn.titleLabel?.font = UIFont(name: PingFangSC_Medium, size: 11)
  82. formBtn.setTitleColor(UIColor(hexString: "FD8B23"), for: .normal )
  83. formBtn.setBackgroundImage(UIImage(named: "form_normal"), for: .normal)
  84. formBtn.setTitleColor(UIColor(hexString: "FFFFFF"), for: .selected)
  85. formBtn.setBackgroundImage(UIImage(named: "form_selected"), for: .selected)
  86. formBtn.addTarget(self, action:#selector(choseFormType) , for: .touchUpInside)
  87. return formBtn
  88. }()
  89. lazy var barChartBtn: UIButton = {
  90. let barChartBtn = UIButton(type: .custom)
  91. barChartBtn.titleLabel?.font = UIFont(name: PingFangSC_Medium, size: 11)
  92. barChartBtn.setTitle("Histogram".da_localizedStr(), for: .normal)
  93. barChartBtn.setTitleColor(UIColor(hexString: "FD8B23"), for: .normal )
  94. barChartBtn.setBackgroundImage(UIImage(named: "form_normal"), for: .normal)
  95. barChartBtn.setTitleColor(UIColor(hexString: "FFFFFF"), for: .selected)
  96. barChartBtn.setBackgroundImage(UIImage(named: "form_selected"), for: .selected)
  97. barChartBtn.addTarget(self, action:#selector(choseFormType) , for: .touchUpInside)
  98. return barChartBtn
  99. }()
  100. lazy var scaleBtn: UIButton = {
  101. let scaleBtn = UIButton(type: .custom)
  102. scaleBtn.setBackgroundImage(UIImage(named: "scale"), for: .normal)
  103. scaleBtn.layer.masksToBounds = true
  104. scaleBtn.layer.cornerRadius = 2
  105. scaleBtn.addTarget(self, action: #selector(scaleAction), for: .touchUpInside)
  106. return scaleBtn
  107. }()
  108. lazy var shareBtn: UIButton = {
  109. let shareBtn = UIButton(type: .custom)
  110. shareBtn.setBackgroundImage(UIImage(named: "share"), for: .normal)
  111. shareBtn.layer.masksToBounds = true
  112. shareBtn.layer.cornerRadius = 2
  113. shareBtn.addTarget(self, action: #selector(shareAction), for: .touchUpInside)
  114. return shareBtn
  115. }()
  116. lazy var clearDataBtn: UIButton = {
  117. let clearDataBtn = UIButton(type: .custom)
  118. clearDataBtn.setBackgroundImage(UIImage(named: "22"), for: .normal)
  119. clearDataBtn.layer.masksToBounds = true
  120. clearDataBtn.layer.cornerRadius = 2
  121. clearDataBtn.addTarget(self, action: #selector(clearHistoryData), for: .touchUpInside)
  122. return clearDataBtn
  123. }()
  124. lazy var formView: SheetView = {
  125. let formView = SheetView()
  126. formView.delegate = self
  127. formView.dataSource = self
  128. formView.titleRowHeight = 63
  129. formView.titleColWidth = 143
  130. formView.backgroundColor = UIColor.white
  131. return formView
  132. }()
  133. lazy var chartsView: SBTChartsView = {
  134. let chartsView = SBTChartsView()
  135. return chartsView
  136. }()
  137. func fillCellData(_ weekData : [OneDayData]){
  138. self.dataArr?.removeAll()
  139. chartsView.fillChartsData(weekData)
  140. for i in 0..<weekData.count {
  141. let oneDay = weekData[i]
  142. var aDataArr : [String]? = [String]()
  143. aDataArr?.removeAll()
  144. let his_batteryVoltageMin = oneDay.his_batteryVoltageMin// 蓄电池最低电压
  145. let his_batteryVoltageMax = oneDay.his_batteryVoltageMax// 蓄电池最高电压
  146. let his_chargingCurrentMax = oneDay.his_chargingCurrentMax// 充电最大电流
  147. let his_chargingPowerMax = oneDay.his_chargingPowerMax// 充电最大功率
  148. let his_chargingAmpereHour = oneDay.his_chargingAmpereHour // 充电安时数
  149. let his_dischargeCurrentmax = oneDay.his_dischargeCurrentmax // 放电最大电流
  150. let his_dischargePowerMax = oneDay.his_dischargePowerMax// 放电最大功率
  151. let his_dischargeAmpereHour = oneDay.his_dischargeAmpereHour // 放电安时数
  152. let his_generationCapacity = String(format: "%.3f", Double(oneDay.his_generationCapacity!)! * 0.001)// 发电量
  153. let his_dischargeCapacity = String(format: "%.3f", Double(oneDay.his_dischargeCapacity!)! * 0.001)// 充电量
  154. //log.debug("发点量--- \(his_generationCapacity)放电量 === \(his_dischargeCapacity)")
  155. aDataArr?.append(his_batteryVoltageMin!)
  156. aDataArr?.append(his_batteryVoltageMax!)
  157. aDataArr?.append(his_chargingCurrentMax!)
  158. aDataArr?.append(his_chargingPowerMax!)
  159. aDataArr?.append(his_chargingAmpereHour!)
  160. aDataArr?.append(his_dischargeCurrentmax!)
  161. aDataArr?.append(his_dischargePowerMax!)
  162. aDataArr?.append(his_dischargeAmpereHour!)
  163. aDataArr?.append(his_generationCapacity)
  164. aDataArr?.append(his_dischargeCapacity)
  165. self.dataArr?.append(aDataArr!)
  166. //log.debug("一周数据 : \(self.dataArr!)")
  167. formView.reloadData()
  168. }
  169. }
  170. override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  171. super.init(style: style, reuseIdentifier: reuseIdentifier)
  172. createUI()
  173. dayArr = [String]()
  174. let first = nowTime("yyyy-M-d")
  175. let second = getLastDay(first)
  176. let third = getLastDay(second)
  177. let foreth = getLastDay(third)
  178. let fifth = getLastDay(foreth)
  179. let sixth = getLastDay(fifth)
  180. let seventh = getLastDay(sixth)
  181. let eighth = getLastDay(seventh)
  182. dayArr?.append("Today".da_localizedStr())
  183. dayArr?.append("Yesterday".da_localizedStr())
  184. dayArr?.append(third.subString(start: 5))
  185. dayArr?.append(foreth.subString(start: 5))
  186. dayArr?.append(fifth.subString(start: 5))
  187. dayArr?.append(sixth.subString(start: 5))
  188. dayArr?.append(seventh.subString(start: 5))
  189. dayArr?.append(eighth.subString(start: 5))
  190. //
  191. }
  192. required init?(coder aDecoder: NSCoder) {
  193. fatalError("init(coder:) has not been implemented")
  194. }
  195. override func awakeFromNib() {
  196. super.awakeFromNib()
  197. // Initialization code
  198. }
  199. override func setSelected(_ selected: Bool, animated: Bool) {
  200. super.setSelected(selected, animated: animated)
  201. // Configure the view for the selected state
  202. }
  203. override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
  204. }
  205. func createUI() {
  206. //toolBox 添加到scrollview上
  207. self.addSubview(self.toolBox)
  208. //添加按钮到toolBox上
  209. toolBox.addSubview(self.formBtn)
  210. toolBox.addSubview(self.barChartBtn)
  211. toolBox.addSubview(self.clearDataBtn)
  212. toolBox.addSubview(scaleBtn)
  213. toolBox.addSubview(shareBtn)
  214. formBtn.isSelected = true ///选择表格按钮
  215. scaleBtn.isHidden = true /// 放大按钮
  216. formView.isHidden = false /// 表格view
  217. chartsView.isHidden = true
  218. //布局
  219. formBtn.snp.makeConstraints { (make) in
  220. make.left.equalToSuperview().offset(25)
  221. make.top.equalToSuperview().offset(10)
  222. make.width.equalTo(100)
  223. make.height.equalTo(30)
  224. }
  225. barChartBtn.snp.makeConstraints { (make) in
  226. make.left.equalTo(formBtn.snp.right).offset(8)
  227. make.top.equalTo(formBtn.snp.top)
  228. make.width.equalTo(100)
  229. make.height.equalTo(30)
  230. }
  231. shareBtn.snp.makeConstraints { (make) in
  232. make.left.equalTo(barChartBtn.snp.right).offset(8)
  233. make.top.equalToSuperview().offset(10)
  234. make.width.height.equalTo(30)
  235. }
  236. clearDataBtn.snp.makeConstraints { (make) in
  237. make.left.equalTo(shareBtn.snp.right).offset(8)
  238. make.top.equalToSuperview().offset(10)
  239. make.width.height.equalTo(30)
  240. }
  241. scaleBtn.snp.makeConstraints { (make) in
  242. make.left.equalTo(clearDataBtn.snp.right).offset(8)
  243. make.top.equalToSuperview().offset(10)
  244. make.width.height.equalTo(30)
  245. }
  246. //添加表格视图
  247. self.addSubview(formView)
  248. self.addSubview(chartsView)
  249. formView.snp.makeConstraints { (make) in
  250. make.left.right.equalToSuperview()
  251. make.top.equalTo(toolBox.snp.bottom)
  252. make.height.equalTo(510)
  253. }
  254. chartsView.snp.makeConstraints { (make) in
  255. make.left.right.equalToSuperview()
  256. make.top.equalTo(toolBox.snp.bottom)
  257. make.height.equalTo(356)
  258. }
  259. }
  260. @objc func choseFormType(_ sender:UIButton) {
  261. log.debug("点击了呀 --- -")
  262. formBtn.isSelected = false
  263. barChartBtn.isSelected = false
  264. sender.isSelected = true
  265. //处理事件
  266. if formBtn.isSelected {
  267. log.debug("表格")
  268. scaleBtn.isHidden = true
  269. //shareBtn.isHidden = true
  270. formView.isHidden = false
  271. chartsView.isHidden = true
  272. changeViewCallBack!(false)
  273. //记录当前选择
  274. UserDefaults.standard.set("0", forKey: SBTHistoryDataChartOrFormSelected)
  275. UserDefaults.standard.synchronize()
  276. log.debug(" ++\(chartsView) ---- \(formView)")
  277. }
  278. if barChartBtn.isSelected {
  279. log.debug("柱状图")
  280. scaleBtn.isHidden = false
  281. // shareBtn.isHidden = false
  282. formView.isHidden = true
  283. chartsView.isHidden = false
  284. //记录当前选择
  285. UserDefaults.standard.set("1", forKey: SBTHistoryDataChartOrFormSelected)
  286. UserDefaults.standard.synchronize()
  287. }
  288. }
  289. //清除历史数据
  290. @objc func clearHistoryData() {
  291. log.debug("i清除历史数据")
  292. self.clearHistoryDataCallBack!()
  293. }
  294. //分享事件
  295. @objc func shareAction() {
  296. log.debug("分享")
  297. if self.formBtn.isSelected {
  298. self.shareFormViewCallback!()
  299. }
  300. if self.barChartBtn.isSelected == true {
  301. self.shareCallback!(chartsView)
  302. }
  303. }
  304. //横屏事件
  305. @objc func scaleAction() {
  306. log.debug("横屏")
  307. self.horizontalScreenCallback!()
  308. }
  309. }
  310. extension SBTHistoryDataCell: SheetViewDelegate,SheetViewDataSource{
  311. func sheetView(_ sheetView: SheetView!, heightForRowAt indexPath: IndexPath!) -> CGFloat {
  312. return 44.5
  313. }
  314. func sheetView(_ sheetView: SheetView!, widthForColAt indexPath: IndexPath!) -> CGFloat {
  315. return 55
  316. }
  317. func sheetView(_ sheetView: SheetView!, didSelectItemAtIndexRow indexRow: IndexPath!, indexCol: IndexPath!) {
  318. log.debug("点击了 row\(indexRow.row),col\(indexCol.row)")
  319. }
  320. func sheetView(_ sheetView: SheetView!, numberOfRowsInSection section: Int) -> Int {
  321. return 10
  322. }
  323. func sheetView(_ sheetView: SheetView!, numberOfColsInSection section: Int) -> Int {
  324. return 8
  325. }
  326. func sheetView(_ sheetView: SheetView!, cellForContentItemAtIndexRow indexRow: IndexPath!, indexCol: IndexPath!) -> String! {
  327. return self.dataArr![indexCol.row][indexRow.row]
  328. }
  329. func sheetView(_ sheetView: SheetView!, cellForLeftColAt indexPath: IndexPath!) -> String! {
  330. let rowArrs = ["Minimum_battery_voltage_of_the_day_(V)".da_localizedStr(),
  331. "Maximum_battery_voltage_of_the_day_(V)".da_localizedStr(),
  332. "Maximum_charge_current_of_the_day_(A)".da_localizedStr(),
  333. "Maximum_charge_power_of_the_day_(W)".da_localizedStr(),
  334. "Charge_amp_hours_of_the_day_(Ah)".da_localizedStr(),
  335. "Maximum_discharge_current_of_the_day_(A)".da_localizedStr(),
  336. "Maximum_discharge_power_of_the_day_(W)".da_localizedStr(),
  337. "Discharge_amp_hours_of_the_day_(Ah)".da_localizedStr(),
  338. "Power_generation_of_the_day_(kWh)".da_localizedStr(),
  339. "Discharge_amount_of_the_day_(kWh)".da_localizedStr()]
  340. return rowArrs[indexPath.row]
  341. }
  342. func sheetView(_ sheetView: SheetView!, cellForTopRowAt indexPath: IndexPath!) -> String! {
  343. return dayArr![indexPath.row]
  344. }
  345. func sheetView(_ sheetView: SheetView!, cellWithColorAtIndexRow indexRow: IndexPath!) -> Bool {
  346. return indexRow.row % 2 == 0 ? true : false
  347. }
  348. }