StatisticsOfficialPageController.swift 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. //
  2. // StatisticsOfficialPageController.swift
  3. // JiaPeiManage
  4. //
  5. // Created by Ning.ge on 2023/6/28.
  6. //
  7. import UIKit
  8. import RxSwift
  9. import RxCocoa
  10. import PGDatePicker
  11. final class StatisticsOfficialPageController: BaseGroupTableViewController {
  12. let cellIdentifier:String = "_StatisticsOfficialPageCell"
  13. // MARK: 服务属性
  14. private let statisticsService: StatisticsServiceType = StatisticsService(networking: StatisticsNetworking())
  15. // MARK: UI let
  16. let statusBar = UIView().then {
  17. $0.backgroundColor = UIColor.db_theme
  18. }
  19. let navBar = MeTraineeNavBar.loadFromNib().then {
  20. $0.title_label.text = "全部报名统计"
  21. }
  22. let headerView = StatisticsPageHeaderView.loadFromNib().then {
  23. $0.backgroundColor = .db_theme
  24. }
  25. // MARK: 数据
  26. var stuTotalCountDataModel:StuTotalCountDataModel?
  27. var stuCountDataModel:StuCountDataModel?
  28. var dateType:DateType = .day
  29. var startDate:String = ""
  30. var endDate:String = ""
  31. var fieldType:Int = 1 //1:时间 2:学员数
  32. var sortType:Int = 2 //1:正序 2:倒序
  33. var datePicCount = 0 //选择器 -日期end 2
  34. override func setupConstraints() {
  35. statusBar.snp.makeConstraints { (make) in
  36. make.left.right.top.equalToSuperview()
  37. make.height.equalTo(Metric.statusBarHeight)
  38. }
  39. navBar.snp.remakeConstraints { (make) in
  40. make.left.right.equalToSuperview()
  41. make.height.equalTo(Metric.navBarHeight)
  42. make.top.equalTo(statusBar.snp.bottom)
  43. }
  44. tableView.snp.remakeConstraints { make in
  45. make.top.equalTo(navBar.snp.bottom)
  46. make.left.right.bottom.equalToSuperview()
  47. }
  48. }
  49. override func viewDidLoad() {
  50. super.viewDidLoad()
  51. setupUI()
  52. biandView()
  53. getStatisticsList(isLoading: true)
  54. }
  55. // MARK: 私有方法
  56. //显示时间选择器
  57. func showPGDatePickManager(){
  58. self.datePicCount+=1
  59. switch dateType {
  60. case .day:
  61. let datePickerManager = PGDatePickManager()
  62. datePickerManager.headerViewBackgroundColor = UIColor("#031223")
  63. datePickerManager.titleLabel.text = "选择年月日"
  64. datePickerManager.titleLabel.textColor = UIColor.white
  65. datePickerManager.cancelButtonTextColor = .db_fontGray
  66. datePickerManager.confirmButtonTextColor = .db_green
  67. let datePicker = datePickerManager.datePicker!
  68. datePicker.lineBackgroundColor = .db_green
  69. datePicker.textColorOfSelectedRow = .db_green
  70. datePicker.backgroundColor = UIColor("#031223")
  71. datePicker.delegate = self
  72. datePicker.isHiddenMiddleText = false;
  73. datePicker.datePickerType = .segment;
  74. datePicker.datePickerMode = .date
  75. self.present(datePickerManager, animated: false, completion: nil)
  76. case .month:
  77. let datePickerManager = PGDatePickManager()
  78. datePickerManager.headerViewBackgroundColor = UIColor("#031223")
  79. datePickerManager.titleLabel.text = "选择年月"
  80. datePickerManager.titleLabel.textColor = UIColor.white
  81. datePickerManager.cancelButtonTextColor = .db_fontGray
  82. datePickerManager.confirmButtonTextColor = .db_green
  83. let datePicker = datePickerManager.datePicker!
  84. datePicker.lineBackgroundColor = .db_green
  85. datePicker.textColorOfSelectedRow = .db_green
  86. datePicker.backgroundColor = UIColor("#031223")
  87. datePicker.delegate = self
  88. datePicker.isHiddenMiddleText = false;
  89. datePicker.datePickerType = .segment
  90. datePicker.datePickerMode = .yearAndMonth
  91. self.present(datePickerManager, animated: false, completion: nil)
  92. case .year:
  93. let datePickerManager = PGDatePickManager()
  94. datePickerManager.headerViewBackgroundColor = UIColor("#031223")
  95. datePickerManager.titleLabel.text = "选择年"
  96. datePickerManager.titleLabel.textColor = UIColor.white
  97. datePickerManager.cancelButtonTextColor = .db_fontGray
  98. datePickerManager.confirmButtonTextColor = .db_green
  99. let datePicker = datePickerManager.datePicker!
  100. datePicker.lineBackgroundColor = .db_green
  101. datePicker.textColorOfSelectedRow = .db_green
  102. datePicker.backgroundColor = UIColor("#031223")
  103. datePicker.delegate = self
  104. datePicker.isHiddenMiddleText = false;
  105. datePicker.datePickerType = .segment
  106. datePicker.datePickerMode = .year
  107. self.present(datePickerManager, animated: false, completion: nil)
  108. }
  109. }
  110. //配置显示时间
  111. func configUIdata(){
  112. // 根据不同的 dateType 进行相应的数据请求
  113. var starttime = ""
  114. var endtime = ""
  115. switch dateType {
  116. case .day:
  117. starttime = startDate
  118. endtime = endDate
  119. case .month:
  120. starttime = String(startDate.prefix(7))
  121. endtime = String(endDate.prefix(7))
  122. case .year:
  123. starttime = String(startDate.prefix(4))
  124. endtime = String(endDate.prefix(4))
  125. }
  126. headerView.date_section_button.setTitle("\(starttime)~\(endtime)", for: .normal)
  127. }
  128. func setupUI(){
  129. self.view.addSubview(navBar)
  130. self.view.addSubview(statusBar)
  131. self.view.backgroundColor = .db_theme
  132. self.navBar.back_button.addTarget(self, action: #selector(actionBackdo), for: .touchUpInside)
  133. self.navBar.search_button.isHidden = true
  134. self.endDate = NYDate.getThisDate()
  135. self.startDate = self.endDate.prefix(7)+"-01"
  136. configUIdata()
  137. //header - 事件
  138. headerView.items_date_segmented.rx.selectedSegmentIndex
  139. .map { DateType(rawValue: $0)! }
  140. .subscribe(onNext: { [weak self] dateType in
  141. self?.dateType = dateType
  142. self?.configUIdata()
  143. self?.switchStatisticsStuCount()
  144. print("datetype = \(dateType)")
  145. })
  146. .disposed(by: disposeBag)
  147. //日前选择
  148. headerView.date_section_button.rx.tap.subscribe ({ [unowned self] (_) in
  149. self.showPGDatePickManager()
  150. }).disposed(by: disposeBag)
  151. //时间排序
  152. headerView.time_button.rx.tap
  153. .subscribe ({ [unowned self] (_) in
  154. headerView.time_button.isSelected = !headerView.time_button.isSelected
  155. self.fieldType = 1 //1:时间 2:学员数
  156. self.sortType = headerView.time_button.isSelected ? 1:2
  157. self.switchStatisticsStuCount()
  158. }).disposed(by: disposeBag)
  159. //学员排序
  160. headerView.student_button.rx.tap.subscribe ({ [unowned self] (_) in
  161. headerView.student_button.isSelected = !headerView.student_button.isSelected
  162. self.fieldType = 2 //1:时间 2:学员数
  163. self.sortType = headerView.student_button.isSelected ? 1:2
  164. self.switchStatisticsStuCount()
  165. }).disposed(by: disposeBag)
  166. }
  167. func biandView(){
  168. tableView.delegate = self
  169. tableView.dataSource = self
  170. tableView.separatorStyle = .none //去除分割线
  171. tableView.register(UINib(nibName: "StatisticsPageCell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
  172. tableView.rowHeight = 44.f
  173. tableView.contentInset = UIEdgeInsets(top: -25, left: 0, bottom: -25, right: 0)
  174. setupRefreshHeader(tableView) {[unowned self] in
  175. self.getStatisticsList(isLoading: false)
  176. }
  177. }
  178. //获取统计报名
  179. func getStatisticsList(isLoading:Bool){
  180. if isLoading {NYTips.show()}
  181. self.statisticsService.statisticsStuCount(city: LocalManager.userInfo.city!, schoolId: LocalManager.userInfo.schoolId).subscribe(onSuccess: {[unowned self] stuTotalCountDataModel in
  182. print("成功%@",stuTotalCountDataModel)
  183. self.stuTotalCountDataModel = stuTotalCountDataModel
  184. self.statisticsService.everyDayStuCountRequest(city: LocalManager.userInfo.city!, schoolId: LocalManager.userInfo.schoolId, startDate: self.startDate, endDate: self.endDate, fieldType: self.fieldType,sortType: self.sortType).subscribe(onSuccess: { stuCountDataModel in
  185. self.stuCountDataModel = stuCountDataModel
  186. self.hideLoadAnimation()
  187. self.tableView.reloadData()
  188. self.stopRefresh()
  189. NYTips.hide()
  190. }, onError: { error in
  191. self.stopRefresh()
  192. NYTips.hide()
  193. })
  194. .disposed(by: disposeBag)
  195. }, onError: { error in
  196. self.stopRefresh()
  197. NYTips.hide()
  198. })
  199. .disposed(by: disposeBag)
  200. }
  201. //切换
  202. func switchStatisticsStuCount(){
  203. // 根据不同的 dateType 进行相应的数据请求
  204. switch dateType {
  205. case .day:
  206. // 发起请求,获取日数据
  207. self.statisticsService.everyDayStuCountRequest(city: LocalManager.userInfo.city!, schoolId: LocalManager.userInfo.schoolId, startDate: self.startDate, endDate: self.endDate, fieldType: self.fieldType,sortType: self.sortType).subscribe(onSuccess: { stuCountDataModel in
  208. self.stuCountDataModel = stuCountDataModel
  209. self.tableView.reloadData()
  210. }, onError: { error in
  211. })
  212. .disposed(by: disposeBag)
  213. case .month:
  214. // 发起请求,获取月数据
  215. let startMonth = String(self.startDate.prefix(7))
  216. let endMonth = String(self.endDate.prefix(7))
  217. self.statisticsService.everyMonthStuCount(city: LocalManager.userInfo.city!, schoolId: LocalManager.userInfo.schoolId, startMonth: startMonth, endMonth: endMonth, fieldType: self.fieldType,sortType: self.sortType).subscribe(onSuccess: { stuCountDataModel in
  218. self.stuCountDataModel = stuCountDataModel
  219. self.tableView.reloadData()
  220. }, onError: { error in
  221. })
  222. .disposed(by: disposeBag)
  223. case .year:
  224. // 发起请求,获取年数据
  225. let startYear = String(self.startDate.prefix(4))
  226. let endYear = String(self.endDate.prefix(4))
  227. self.statisticsService.everyYearStuCount(city: LocalManager.userInfo.city!, schoolId: LocalManager.userInfo.schoolId, startYear: startYear, endYear: endYear, fieldType: self.fieldType,sortType: self.sortType).subscribe(onSuccess: { stuCountDataModel in
  228. self.stuCountDataModel = stuCountDataModel
  229. self.tableView.reloadData()
  230. }, onError: { error in
  231. })
  232. .disposed(by: disposeBag)
  233. }
  234. }
  235. }
  236. //数据源
  237. extension StatisticsOfficialPageController:UITableViewDataSource {
  238. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  239. if stuCountDataModel != nil&&(stuCountDataModel?.rows!.count)!>0 {
  240. return (stuCountDataModel?.rows.count)!+1
  241. }
  242. return 0
  243. }
  244. func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
  245. if stuTotalCountDataModel != nil {
  246. headerView.setStuTotalCountDataModel(stuTotalCountDataModel: stuTotalCountDataModel!)
  247. }
  248. return headerView
  249. }
  250. func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
  251. return 352.f
  252. }
  253. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  254. let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! StatisticsPageCell
  255. cell.contentView.backgroundColor = ((indexPath.row%2) != 0) ? UIColor("#113357") : UIColor("#0B2B4D")
  256. cell.backgroundColor = ((indexPath.row%2) != 0) ? UIColor("#113357") : UIColor("#0B2B4D")
  257. if (indexPath.row==0){
  258. let obj = (stuCountDataModel?.data)! as StuCountTotalModel
  259. cell.date_label.text = "总计"
  260. cell.num_label.text = String(obj.total)
  261. cell.num_label.textColor = .db_green
  262. }else{
  263. let info = (stuCountDataModel?.rows[indexPath.row-1])! as StuCountInfoModel
  264. cell.date_label.text = info.dateTime
  265. cell.num_label.text = String(info.stuCount)
  266. cell.num_label.textColor = .db_fontGray
  267. }
  268. return cell
  269. }
  270. }
  271. //事件
  272. extension StatisticsOfficialPageController:UITableViewDelegate {
  273. }
  274. //PGDatePickerDelegate
  275. extension StatisticsOfficialPageController: PGDatePickerDelegate {
  276. func datePicker(_ datePicker: PGDatePicker!, didSelectDate dateComponents: DateComponents!) {
  277. print("dateComponents = ", dateComponents)
  278. if datePicCount>=2 {
  279. self.endDate = String(format: "%02d", dateComponents.year ?? 0)+"-"+String(format: "%02d", dateComponents.month ?? 0)+"-"+String(format: "%02d", dateComponents.day ?? 0)
  280. datePicCount=0
  281. configUIdata()
  282. self.switchStatisticsStuCount()
  283. }
  284. else {
  285. self.startDate = String(format: "%02d", dateComponents.year ?? 0)+"-"+String(format: "%02d", dateComponents.month ?? 0)+"-"+String(format: "%02d", dateComponents.day ?? 0)
  286. configUIdata()
  287. DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
  288. // 在延迟 1 秒后执行的代码
  289. self.showPGDatePickManager()
  290. }
  291. }
  292. }
  293. }