ソースを参照

优化统计-vm抽取逻辑

openlockPPP 1 年間 前
コミット
7491240786

+ 25 - 335
JiaPeiManage/Sources/Modulars/Statistics/Controllers/StatisticsPageController.swift

@@ -17,11 +17,8 @@ enum StatisticsType: Int {
 
 final class StatisticsPageController: BaseGroupTableViewController {
 
-    let cellIdentifier:String = "_StatisticsPageCell"
-    // MARK: 服务属性
-    private let statisticsService: StatisticsServiceType = StatisticsService(networking: StatisticsNetworking())
     //VM
-    let statisticsPageViewModel = StatisticsPageViewModel()
+    var statisticsPageViewModel:StatisticsPageViewModel?
     
     // MARK: UI let
     let statusBar = UIView().then {
@@ -47,13 +44,6 @@ final class StatisticsPageController: BaseGroupTableViewController {
         $0.isHidden = true
     }
     // 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 type:StatisticsType = .normal // 普通-预售
     
     override func setupConstraints() {
@@ -88,6 +78,8 @@ final class StatisticsPageController: BaseGroupTableViewController {
     init(type:StatisticsType) {
         self.type = type
         super.init()
+        statisticsPageViewModel = StatisticsPageViewModel(vc: self)
+        statisticsPageViewModel?.type = type
     }
     
     required convenience init?(coder aDecoder: NSCoder) {
@@ -98,158 +90,7 @@ final class StatisticsPageController: BaseGroupTableViewController {
         super.viewDidLoad()
         setupUI()
         biandView()
-        getStatisticsList(isLoading: true)
-    }
-    
-    // MARK: 私有方法
-    //显示selectDateView
-    func showSelectDateView(){
-        if(self.selectDateView.isHidden)
-        {
-            let  bottomY = (type == .presell ? headerView.qmui_bottom : officialheaderView.qmui_bottom )
-            //计算相对坐标
-            let headerFrameInSuperview = tableView.convert(CGPoint(x: 0, y: bottomY), to: tableView.superview)
-            selectDateView.snp.remakeConstraints { make in
-                make.top.equalTo(headerFrameInSuperview.y-navBar.bottom+(isIphoneX==true ? 20:0))
-                make.left.right.equalToSuperview()
-                make.height.equalTo(172.f)
-            }
-            self.loadViewIfNeeded()//提醒刷
-            //显示
-            self.selectDateView.startdate_button.setTitle(startDate, for: .normal)
-            self.selectDateView.enddate_button.setTitle(endDate, for: .normal)
-            self.selectDateView.setDateType(type: dateType)
-            self.selectDateView.isHidden = false
-            self.selectDateViewBgBtn.isHidden = false
-        }else{
-            //隐藏
-            self.selectDateView.isHidden = true
-            self.selectDateViewBgBtn.isHidden = true
-        }
-        
-    }
-    //显示时间选择器
-    func showPGDatePickManager(tag:Int){
-        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.tag = tag
-            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.tag = tag
-            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.tag = tag
-            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 configDefaulthDate(){
-        switch dateType {
-        case .day:
-            let dates = NYDate.getDateMonth()
-            self.endDate = dates[1]
-            self.startDate = dates[0]
-        case .month:
-            let dates = NYDate.getDateYear() //本年 NYDate.getDateMonthSectionNum(num: -2)
-            self.endDate =  String(dates[1].prefix(7))
-            self.startDate =  String(dates[0].prefix(7))
-        case .year:
-            let dates = NYDate.getDateYearSectionNum(num: 4)
-            self.endDate =  String(dates[1].prefix(4))
-            self.startDate =  String(dates[0].prefix(4))
-        }
-    }
-    //配置显示时间
-    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))
-        }
-        if(type == .presell){
-            headerView.date_section_button.setTitle("\(starttime)~\(endtime)", for: .normal)
-        }else {
-            officialheaderView.date_section_button.setTitle("\(starttime)~\(endtime)", for: .normal)
-        }
-    }
-    //confirm 确定处理
-    func confirmHandledo(){
-        //刷新数据
-        self.startDate = selectDateView.startdate_button.currentTitle!
-        self.endDate = selectDateView.enddate_button.currentTitle!
-        self.configUIdata()
-        self.showSelectDateView()
-        self.switchStatisticsStuCount()
-    }
-    //重置
-    func resetHandledo(){
-        self.selectDateView.startdate_button.setTitle(getButtonDate(date: self.startDate), for: .normal)
-        self.selectDateView.enddate_button.setTitle(getButtonDate(date: self.endDate), for: .normal)
-        self.selectDateView.setDateType(type: dateType)
-    }
-    
-    func getButtonDate(date:String)->String{
-        var _date = ""
-        switch dateType {
-        case .month:
-            _date = String(date.prefix(7))
-        case .year:
-            _date = String(date.prefix(4))
-        case .day:
-            _date = String(date.prefix(10))
-        }
-        return _date
+        self.statisticsPageViewModel!.getStatisticsList(isLoading: true)
     }
     
     func setupUI(){
@@ -260,85 +101,70 @@ final class StatisticsPageController: BaseGroupTableViewController {
         self.view.insertSubview(selectDateView, at: 9999)
         self.navBar.back_button.addTarget(self, action: #selector(actionBackdo), for: .touchUpInside)
         self.navBar.search_button.isHidden = true
-        configDefaulthDate()
-        configUIdata()
+        self.statisticsPageViewModel!.configDefaulthDate()
+        self.statisticsPageViewModel!.configUIdata()
         if(type == .presell){
             //header - 事件
             headerView.items_date_segmented.rx.selectedSegmentIndex
                     .map { DateType(rawValue: $0)! }
-                        .subscribe(onNext: { [weak self] dateType in
-                            self?.dateType = dateType
-                            self?.configDefaulthDate()
-                            self?.configUIdata()
-                            self?.selectDateView.showCount = 0
-                            self?.switchStatisticsStuCount()
+                        .subscribe(onNext: { [unowned self] dateType in
+                            self.statisticsPageViewModel?.selectedSegmentIndexdo(dateType: dateType)
                             print("datetype = \(dateType)")
                         })
                         .disposed(by: disposeBag)
             //日前选择
             headerView.date_section_button.rx.tap.subscribe ({  [unowned self] (_) in
-                self.showSelectDateView()
+                self.statisticsPageViewModel!.showSelectDateView()
             }).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()
+                    self.statisticsPageViewModel?.getDateSortdo()
             }).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()
+                self.statisticsPageViewModel?.getStuCountdo()
             }).disposed(by: disposeBag)
         }else{
             //普通模式
             //header - 事件
             officialheaderView.items_date_segmented.rx.selectedSegmentIndex
                     .map { DateType(rawValue: $0)! }
-                        .subscribe(onNext: { [weak self] dateType in
-                            self?.dateType = dateType
-                            self?.configDefaulthDate()
-                            self?.configUIdata()
-                            self?.switchStatisticsStuCount()
+                        .subscribe(onNext: { [unowned self] dateType in
+                            self.statisticsPageViewModel?.selectedSegmentIndexdo(dateType: dateType)
                             print("datetype = \(dateType)")
                         })
                         .disposed(by: disposeBag)
             //日前选择
             officialheaderView.date_section_button.rx.tap.subscribe ({  [unowned self] (_) in
-                self.showSelectDateView()
+                self.statisticsPageViewModel!.showSelectDateView()
             }).disposed(by: disposeBag)
             //时间排序
             officialheaderView.time_button.rx.tap
                 .subscribe ({  [unowned self] (_) in
                     officialheaderView.time_button.isSelected = !officialheaderView.time_button.isSelected
-                    self.fieldType = 1 //1:时间 2:学员数
-                    self.sortType = officialheaderView.time_button.isSelected ? 1:2
-                    self.switchStatisticsStuCount()
+                    self.statisticsPageViewModel!.getDateSortdo()
             }).disposed(by: disposeBag)
             //学员排序
             officialheaderView.student_button.rx.tap.subscribe ({  [unowned self] (_) in
                 officialheaderView.student_button.isSelected = !officialheaderView.student_button.isSelected
-                self.fieldType = 2 //1:时间 2:学员数
-                self.sortType = officialheaderView.student_button.isSelected ? 1:2
-                self.switchStatisticsStuCount()
+                self.statisticsPageViewModel?.getStuCountdo()
             }).disposed(by: disposeBag)
         }
         
         //hide showSelectDateView
         selectDateViewBgBtn.rx.tap.subscribe ({  [unowned self] (_) in
-            self.showSelectDateView()
+            self.statisticsPageViewModel!.showSelectDateView()
         }).disposed(by: disposeBag)
         //开始时间 事件
         selectDateView.startdate_button.rx.tap.subscribe ({  [unowned self] (_) in
-            self.showPGDatePickManager(tag: 1)
+            self.statisticsPageViewModel!.showPGDatePickManager(tag: 1)
         }).disposed(by: disposeBag)
         //结束时间 事件
         selectDateView.enddate_button.rx.tap.subscribe ({  [unowned self] (_) in
-            self.showPGDatePickManager(tag: 2)
+            self.statisticsPageViewModel!.showPGDatePickManager(tag: 2)
         }).disposed(by: disposeBag)
         //本月
         selectDateView.month_button.rx.tap.subscribe ({  [unowned self] (_) in
@@ -358,19 +184,19 @@ final class StatisticsPageController: BaseGroupTableViewController {
         }).disposed(by: disposeBag)
         //重置
         selectDateView.reset_button.rx.tap.subscribe ({  [unowned self] (_) in
-            self.resetHandledo()
+            self.statisticsPageViewModel!.resetHandledo()
         }).disposed(by: disposeBag)
         //确定
         selectDateView.confirm_button.rx.tap.subscribe ({  [unowned self] (_) in
-            self.confirmHandledo()
+            self.statisticsPageViewModel!.confirmHandledo()
         }).disposed(by: disposeBag)
         
     }
     func biandView(){
-        tableView.delegate = self
-        tableView.dataSource = self
+        tableView.delegate = self.statisticsPageViewModel
+        tableView.dataSource = self.statisticsPageViewModel
         tableView.separatorStyle = .none //去除分割线
-        tableView.register(UINib(nibName: "StatisticsPageCell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
+        tableView.register(UINib(nibName: "StatisticsPageCell", bundle: nil), forCellReuseIdentifier: self.statisticsPageViewModel!.cellIdentifier)
         tableView.rowHeight = 44.f
         if(isIphoneX){
             tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
@@ -378,145 +204,9 @@ final class StatisticsPageController: BaseGroupTableViewController {
             tableView.contentInset = UIEdgeInsets(top: -25, left: 0, bottom: -25, right: 0)
         }
         setupRefreshHeader(tableView) {[unowned self] in
-            self.getStatisticsList(isLoading: false)
+            self.statisticsPageViewModel!.getStatisticsList(isLoading: false)
         }
         self.isEmptyDisplay = 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 (type == .presell){
-            if stuTotalCountDataModel != nil {
-                headerView.setStuTotalCountDataModel(stuTotalCountDataModel: stuTotalCountDataModel!)
-            }
-            return headerView
-        }
-        if stuTotalCountDataModel != nil {
-            officialheaderView.setStuTotalCountDataModel(stuTotalCountDataModel: stuTotalCountDataModel!)
-        }
-        return officialheaderView
-    }
-    
-    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
-        var height = 232.f
-        if (type == .presell){
-            height = 352.f
-        }
-        return height
-    }
-    
-    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)
-        var date = String(format: "%02d", dateComponents.year ?? 0)+"-"+String(format: "%02d", dateComponents.month ?? 0)+"-"+String(format: "%02d", dateComponents.day ?? 0)
-        date = getButtonDate(date: date)
-        if datePicker.tag == 1 {
-            self.selectDateView.startdate_button.setTitle(date, for: .normal)
-        }else if datePicker.tag == 2 {
-            self.selectDateView.enddate_button.setTitle(date, for: .normal)
-        }
-
-    }
 }

+ 321 - 61
JiaPeiManage/Sources/Modulars/Statistics/ViewModel/StatisticsPageViewModel.swift

@@ -7,82 +7,342 @@
 
 import UIKit
 import RxSwift
+import PGDatePicker
 
 class StatisticsPageViewModel: NSObject {
-    
+    let cellIdentifier:String = "_StatisticsPageCell"
     // MARK: 服务属性
     private let statisticsService: StatisticsServiceType = StatisticsService(networking: StatisticsNetworking())
     
-    private let itemsSubject = BehaviorSubject<[StuCountInfoModel]>(value: [])
-        
-    var items: Observable<[StuCountInfoModel]> {
-        return itemsSubject.asObservable()
-    }
+    @objc weak var vc:StatisticsPageController? = nil
+    // 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 type:StatisticsType = .normal // 普通-预售
     
-    
-    override init() {
+    init(vc:StatisticsPageController) {
         super.init()
+        self.vc = vc
     }
-    
+    // MARK: 请求数据
     //获取统计报名
     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)
+        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.itemsSubject.onNext(stuCountDataModel.rows)//消息rx
+                    self.vc!.hideLoadAnimation()
+                        self.vc!.tableView.reloadData()
+                        self.vc!.stopRefresh()
+                        NYTips.hide()
+                    }, onError: { error in
+                        self.vc!.stopRefresh()
+                        NYTips.hide()
+                    })
+                .disposed(by: self.vc!.disposeBag)
+            }, onError: { error in
+                self.vc!.stopRefresh()
+                NYTips.hide()
+            })
+        .disposed(by: self.vc!.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)
-//        }
+        // 根据不同的 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.vc!.tableView.reloadData()
+                }, onError: { error in
+                })
+            .disposed(by: self.vc!.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.vc!.tableView.reloadData()
+                }, onError: { error in
+                })
+            .disposed(by: self.vc!.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.vc!.tableView.reloadData()
+                }, onError: { error in
+                })
+            .disposed(by: self.vc!.disposeBag)
+        }
 
     }
+    // MARK: 公共方法
+    //配置-日期
+    func configDefaulthDate(){
+        switch dateType {
+        case .day:
+            let dates = NYDate.getDateMonth()
+            self.endDate = dates[1]
+            self.startDate = dates[0]
+        case .month:
+            let dates = NYDate.getDateYear() //本年 NYDate.getDateMonthSectionNum(num: -2)
+            self.endDate =  String(dates[1].prefix(7))
+            self.startDate =  String(dates[0].prefix(7))
+        case .year:
+            let dates = NYDate.getDateYearSectionNum(num: 4)
+            self.endDate =  String(dates[1].prefix(4))
+            self.startDate =  String(dates[0].prefix(4))
+        }
+    }
+    //配置显示时间
+    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))
+        }
+        if(type == .presell){
+            vc!.headerView.date_section_button.setTitle("\(starttime)~\(endtime)", for: .normal)
+        }else {
+            vc!.officialheaderView.date_section_button.setTitle("\(starttime)~\(endtime)", for: .normal)
+        }
+    }
+    //confirm 确定处理
+    func confirmHandledo(){
+        //刷新数据
+        self.startDate = vc!.selectDateView.startdate_button.currentTitle!
+        self.endDate = vc!.selectDateView.enddate_button.currentTitle!
+        self.configUIdata()
+        self.showSelectDateView()
+        self.switchStatisticsStuCount()
+    }
+    //重置
+    func resetHandledo(){
+        self.vc!.selectDateView.startdate_button.setTitle(getButtonDate(date: self.startDate), for: .normal)
+        self.vc!.selectDateView.enddate_button.setTitle(getButtonDate(date: self.endDate), for: .normal)
+        self.vc!.selectDateView.setDateType(type: dateType)
+    }
     
+    func getButtonDate(date:String)->String{
+        var _date = ""
+        switch dateType {
+        case .month:
+            _date = String(date.prefix(7))
+        case .year:
+            _date = String(date.prefix(4))
+        case .day:
+            _date = String(date.prefix(10))
+        }
+        return _date
+    }
+    //时间排序
+    func getDateSortdo(){
+        self.fieldType = 1 //1:时间 2:学员数
+        if type == .presell {
+            self.sortType = vc!.headerView.time_button.isSelected ? 1:2
+        }else {
+            self.sortType = vc!.officialheaderView.time_button.isSelected ? 1:2
+        }
+        self.switchStatisticsStuCount()
+    }
+    //学员排序
+    func getStuCountdo(){
+        self.fieldType = 2 //1:时间 2:学员数
+        if type == .presell {
+            self.sortType = vc!.headerView.student_button.isSelected ? 1:2
+        }else {
+            self.sortType = vc!.officialheaderView.student_button.isSelected ? 1:2
+        }
+        self.switchStatisticsStuCount()
+    }
+    //切换swictdo selectedSegmentIndex do
+    func selectedSegmentIndexdo(dateType:DateType){
+        self.dateType = dateType
+        self.configDefaulthDate()
+        self.configUIdata()
+        vc!.selectDateView.showCount = 0
+        self.switchStatisticsStuCount()
+    }
+    
+    // MARK: selectDateView
+    //显示selectDateView
+    func showSelectDateView(){
+        if(self.vc!.selectDateView.isHidden)
+        {
+            let  bottomY = (type == .presell ? vc!.headerView.qmui_bottom : vc!.officialheaderView.qmui_bottom )
+            //计算相对坐标
+            let headerFrameInSuperview = vc!.tableView.convert(CGPoint(x: 0, y: bottomY), to: vc!.tableView.superview)
+            vc!.selectDateView.snp.remakeConstraints { make in
+                make.top.equalTo(headerFrameInSuperview.y-vc!.navBar.bottom+(isIphoneX==true ? 20:0))
+                make.left.right.equalToSuperview()
+                make.height.equalTo(172.f)
+            }
+            vc!.loadViewIfNeeded()//提醒刷
+            //显示
+            vc!.selectDateView.startdate_button.setTitle(startDate, for: .normal)
+            vc!.selectDateView.enddate_button.setTitle(endDate, for: .normal)
+            vc!.selectDateView.setDateType(type: dateType)
+            vc!.selectDateView.isHidden = false
+            vc!.selectDateViewBgBtn.isHidden = false
+        }else{
+            //隐藏
+            vc!.selectDateView.isHidden = true
+            vc!.selectDateViewBgBtn.isHidden = true
+        }
+        
+    }
+    //显示时间选择器
+    func showPGDatePickManager(tag:Int){
+        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.tag = tag
+            datePicker.lineBackgroundColor = .db_green
+            datePicker.textColorOfSelectedRow = .db_green
+            datePicker.backgroundColor = UIColor("#031223")
+            datePicker.delegate = self
+            datePicker.isHiddenMiddleText = false;
+            datePicker.datePickerType = .segment;
+            datePicker.datePickerMode = .date
+            vc!.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.tag = tag
+            datePicker.lineBackgroundColor = .db_green
+            datePicker.textColorOfSelectedRow = .db_green
+            datePicker.backgroundColor = UIColor("#031223")
+            datePicker.delegate = self
+            datePicker.isHiddenMiddleText = false;
+            datePicker.datePickerType = .segment
+            datePicker.datePickerMode = .yearAndMonth
+            vc!.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.tag = tag
+            datePicker.lineBackgroundColor = .db_green
+            datePicker.textColorOfSelectedRow = .db_green
+            datePicker.backgroundColor = UIColor("#031223")
+            datePicker.delegate = self
+            datePicker.isHiddenMiddleText = false;
+            datePicker.datePickerType = .segment
+            datePicker.datePickerMode = .year
+            vc!.present(datePickerManager, animated: false, completion: nil)
+        }
+    }
+    
+}
+
+
+//数据源
+extension StatisticsPageViewModel: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 (type == .presell){
+            if stuTotalCountDataModel != nil {
+                vc!.headerView.setStuTotalCountDataModel(stuTotalCountDataModel: stuTotalCountDataModel!)
+            }
+            return vc!.headerView
+        }
+        if stuTotalCountDataModel != nil {
+            vc!.officialheaderView.setStuTotalCountDataModel(stuTotalCountDataModel: stuTotalCountDataModel!)
+        }
+        return vc!.officialheaderView
+    }
+    
+    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
+        var height = 232.f
+        if (type == .presell){
+            height = 352.f
+        }
+        return height
+    }
+    
+    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 StatisticsPageViewModel:UITableViewDelegate {
+
+    
+}
+
+//PGDatePickerDelegate
+extension StatisticsPageViewModel: PGDatePickerDelegate {
+    func datePicker(_ datePicker: PGDatePicker!, didSelectDate dateComponents: DateComponents!) {
+        
+        print("dateComponents = ", dateComponents)
+        var date = String(format: "%02d", dateComponents.year ?? 0)+"-"+String(format: "%02d", dateComponents.month ?? 0)+"-"+String(format: "%02d", dateComponents.day ?? 0)
+        date = getButtonDate(date: date)
+        if datePicker.tag == 1 {
+            vc!.selectDateView.startdate_button.setTitle(date, for: .normal)
+        }else if datePicker.tag == 2 {
+            vc!.selectDateView.enddate_button.setTitle(date, for: .normal)
+        }
+
+    }
 }