// // StatisticsPageController.swift // JiaPeiManage // // Created by Ning.ge on 2023/6/26. // import UIKit import RxSwift import RxCocoa import PGDatePicker final class StatisticsPageController: BaseGroupTableViewController { let cellIdentifier:String = "_StatisticsPageCell" // MARK: 服务属性 private let statisticsService: StatisticsServiceType = StatisticsService(networking: StatisticsNetworking()) // MARK: UI let let statusBar = UIView().then { $0.backgroundColor = UIColor.db_theme } let navBar = MeTraineeNavBar.loadFromNib().then { $0.title_label.text = "全部报名统计" } let headerView = StatisticsPageHeaderView.loadFromNib().then { $0.backgroundColor = .db_theme } // MARK: 数据 var stuTotalCountDataModel:StuTotalCountDataModel? var stuCountDataModel:StuCountDataModel? var dateType:DateType = .day var startDate:String = "" var endDate:String = "" var fieldType:Int = 1 //1:时间 2:学员数 var sortType:Int = 2 //1:正序 2:倒序 var datePicCount = 0 //选择器 -日期end 2 override func setupConstraints() { statusBar.snp.makeConstraints { (make) in make.left.right.top.equalToSuperview() make.height.equalTo(Metric.statusBarHeight) } navBar.snp.remakeConstraints { (make) in make.left.right.equalToSuperview() make.height.equalTo(Metric.navBarHeight) make.top.equalTo(statusBar.snp.bottom) } tableView.snp.remakeConstraints { make in make.top.equalTo(navBar.snp.bottom) make.left.right.bottom.equalToSuperview() } } override func viewDidLoad() { super.viewDidLoad() setupUI() biandView() getStatisticsList(isLoading: true) } // MARK: 私有方法 //显示时间选择器 func showPGDatePickManager(){ self.datePicCount+=1 switch dateType { case .day: let datePickerManager = PGDatePickManager() datePickerManager.headerViewBackgroundColor = UIColor("#031223") datePickerManager.titleLabel.text = "选择年月日" datePickerManager.titleLabel.textColor = UIColor.white datePickerManager.cancelButtonTextColor = .db_fontGray datePickerManager.confirmButtonTextColor = .db_green let datePicker = datePickerManager.datePicker! datePicker.lineBackgroundColor = .db_green datePicker.textColorOfSelectedRow = .db_green datePicker.backgroundColor = UIColor("#031223") datePicker.delegate = self datePicker.isHiddenMiddleText = false; datePicker.datePickerType = .segment; datePicker.datePickerMode = .date self.present(datePickerManager, animated: false, completion: nil) case .month: let datePickerManager = PGDatePickManager() datePickerManager.headerViewBackgroundColor = UIColor("#031223") datePickerManager.titleLabel.text = "选择年月" datePickerManager.titleLabel.textColor = UIColor.white datePickerManager.cancelButtonTextColor = .db_fontGray datePickerManager.confirmButtonTextColor = .db_green let datePicker = datePickerManager.datePicker! datePicker.lineBackgroundColor = .db_green datePicker.textColorOfSelectedRow = .db_green datePicker.backgroundColor = UIColor("#031223") datePicker.delegate = self datePicker.isHiddenMiddleText = false; datePicker.datePickerType = .segment datePicker.datePickerMode = .yearAndMonth self.present(datePickerManager, animated: false, completion: nil) case .year: let datePickerManager = PGDatePickManager() datePickerManager.headerViewBackgroundColor = UIColor("#031223") datePickerManager.titleLabel.text = "选择年" datePickerManager.titleLabel.textColor = UIColor.white datePickerManager.cancelButtonTextColor = .db_fontGray datePickerManager.confirmButtonTextColor = .db_green let datePicker = datePickerManager.datePicker! datePicker.lineBackgroundColor = .db_green datePicker.textColorOfSelectedRow = .db_green datePicker.backgroundColor = UIColor("#031223") datePicker.delegate = self datePicker.isHiddenMiddleText = false; datePicker.datePickerType = .segment datePicker.datePickerMode = .year self.present(datePickerManager, animated: false, completion: nil) } } //配置显示时间 func configUIdata(){ // 根据不同的 dateType 进行相应的数据请求 var starttime = "" var endtime = "" switch dateType { case .day: starttime = startDate endtime = endDate case .month: starttime = String(startDate.prefix(7)) endtime = String(endDate.prefix(7)) case .year: starttime = String(startDate.prefix(4)) endtime = String(endDate.prefix(4)) } headerView.date_section_button.setTitle("\(starttime)~\(endtime)", for: .normal) } func setupUI(){ self.view.addSubview(navBar) self.view.addSubview(statusBar) self.view.backgroundColor = .db_theme self.navBar.back_button.addTarget(self, action: #selector(actionBackdo), for: .touchUpInside) self.navBar.search_button.isHidden = true self.endDate = NYDate.getThisDate() self.startDate = self.endDate.prefix(7)+"-01" configUIdata() //header - 事件 headerView.items_date_segmented.rx.selectedSegmentIndex .map { DateType(rawValue: $0)! } .subscribe(onNext: { [weak self] dateType in self?.dateType = dateType self?.configUIdata() self?.switchStatisticsStuCount() print("datetype = \(dateType)") }) .disposed(by: disposeBag) //日前选择 headerView.date_section_button.rx.tap.subscribe ({ [unowned self] (_) in self.showPGDatePickManager() }).disposed(by: disposeBag) //时间排序 headerView.time_button.rx.tap .subscribe ({ [unowned self] (_) in headerView.time_button.isSelected = !headerView.time_button.isSelected self.fieldType = 1 //1:时间 2:学员数 self.sortType = headerView.time_button.isSelected ? 1:2 self.switchStatisticsStuCount() }).disposed(by: disposeBag) //学员排序 headerView.student_button.rx.tap.subscribe ({ [unowned self] (_) in headerView.student_button.isSelected = !headerView.student_button.isSelected self.fieldType = 2 //1:时间 2:学员数 self.sortType = headerView.student_button.isSelected ? 1:2 self.switchStatisticsStuCount() }).disposed(by: disposeBag) } func biandView(){ tableView.delegate = self tableView.dataSource = self tableView.separatorStyle = .none //去除分割线 tableView.register(UINib(nibName: "StatisticsPageCell", bundle: nil), forCellReuseIdentifier: cellIdentifier) tableView.rowHeight = 44.f tableView.contentInset = UIEdgeInsets(top: -25, left: 0, bottom: -25, right: 0) setupRefreshHeader(tableView) {[unowned self] in self.getStatisticsList(isLoading: false) } } //获取统计报名 func getStatisticsList(isLoading:Bool){ if isLoading {NYTips.show()} self.statisticsService.statisticsStuCount(city: LocalManager.userInfo.city!, schoolId: LocalManager.userInfo.schoolId).subscribe(onSuccess: {[unowned self] stuTotalCountDataModel in print("成功%@",stuTotalCountDataModel) self.stuTotalCountDataModel = stuTotalCountDataModel 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 self.stuCountDataModel = stuCountDataModel self.hideLoadAnimation() self.tableView.reloadData() self.stopRefresh() NYTips.hide() }, onError: { error in self.stopRefresh() NYTips.hide() }) .disposed(by: disposeBag) }, onError: { error in self.stopRefresh() NYTips.hide() }) .disposed(by: disposeBag) } //切换 func switchStatisticsStuCount(){ // 根据不同的 dateType 进行相应的数据请求 switch dateType { case .day: // 发起请求,获取日数据 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 self.stuCountDataModel = stuCountDataModel self.tableView.reloadData() }, onError: { error in }) .disposed(by: disposeBag) case .month: // 发起请求,获取月数据 let startMonth = String(self.startDate.prefix(7)) let endMonth = String(self.endDate.prefix(7)) 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 self.stuCountDataModel = stuCountDataModel self.tableView.reloadData() }, onError: { error in }) .disposed(by: disposeBag) case .year: // 发起请求,获取年数据 let startYear = String(self.startDate.prefix(4)) let endYear = String(self.endDate.prefix(4)) 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 self.stuCountDataModel = stuCountDataModel self.tableView.reloadData() }, onError: { error in }) .disposed(by: disposeBag) } } } //数据源 extension StatisticsPageController:UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if stuCountDataModel != nil&&(stuCountDataModel?.rows!.count)!>0 { return (stuCountDataModel?.rows.count)!+1 } return 0 } func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { if stuTotalCountDataModel != nil { headerView.setStuTotalCountDataModel(stuTotalCountDataModel: stuTotalCountDataModel!) } return headerView } func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 352.f } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! StatisticsPageCell cell.contentView.backgroundColor = ((indexPath.row%2) != 0) ? UIColor("#113357") : UIColor("#0B2B4D") cell.backgroundColor = ((indexPath.row%2) != 0) ? UIColor("#113357") : UIColor("#0B2B4D") if (indexPath.row==0){ let obj = (stuCountDataModel?.data)! as StuCountTotalModel cell.date_label.text = "总计" cell.num_label.text = String(obj.total) cell.num_label.textColor = .db_green }else{ let info = (stuCountDataModel?.rows[indexPath.row-1])! as StuCountInfoModel cell.date_label.text = info.dateTime cell.num_label.text = String(info.stuCount) cell.num_label.textColor = .db_fontGray } return cell } } //事件 extension StatisticsPageController:UITableViewDelegate { } //PGDatePickerDelegate extension StatisticsPageController: PGDatePickerDelegate { func datePicker(_ datePicker: PGDatePicker!, didSelectDate dateComponents: DateComponents!) { print("dateComponents = ", dateComponents) if datePicCount>=2 { self.endDate = String(format: "%02d", dateComponents.year ?? 0)+"-"+String(format: "%02d", dateComponents.month ?? 0)+"-"+String(format: "%02d", dateComponents.day ?? 0) datePicCount=0 configUIdata() self.switchStatisticsStuCount() } else { self.startDate = String(format: "%02d", dateComponents.year ?? 0)+"-"+String(format: "%02d", dateComponents.month ?? 0)+"-"+String(format: "%02d", dateComponents.day ?? 0) configUIdata() DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { // 在延迟 1 秒后执行的代码 self.showPGDatePickManager() } } } }