//
|
// TravelViewModel.swift
|
// OKProject
|
//
|
// Created by alvin_y on 2020/6/5.
|
// Copyright © 2020 yangwang. All rights reserved.
|
//
|
|
import UIKit
|
import RxSwift
|
import RxCocoa
|
import SwiftDate
|
class TravelViewModel: YYViewModel {
|
|
/// 业务类型(1=快车/专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车)
|
let orderType = BehaviorRelay<OrderType>(value: .taxi)
|
|
/// 选中的车辆类型
|
let selectedCarType = BehaviorRelay<YYCarTypeModel?>(value: nil)
|
|
let rideType = BehaviorRelay<CarpoolingType?>(value: nil)
|
|
/// 周围司机数量
|
let number = BehaviorRelay<String>(value: "当前附近有0辆车可用")
|
|
/// 当前进行的订单Id
|
let currentOrderId = BehaviorRelay<Int>(value: 0)
|
|
/// 报警电话
|
let policeNumber = BehaviorRelay<String>(value: "")
|
|
/// 投诉电话
|
let complaintsNumber = BehaviorRelay<String>(value: "")
|
|
/// 调度
|
let diaoduNumber = BehaviorRelay<String>(value: "")
|
|
///助老模式电话
|
let olderCallNumber = BehaviorRelay<String>(value: "")
|
|
/// 滚动数据源
|
let notice = BehaviorRelay<[SwitchCityModel]>(value: [])
|
|
/// 扫码下单时传此参数
|
let driverId = BehaviorRelay<Int?>(value: nil)
|
|
/// 订单来源(1:APP下单,2:扫码下单,3:小程序下单,4:司机下单,5:调度下单)
|
let orderSource = BehaviorRelay<Int>(value: 1)
|
|
/// 快车 出租车 通用 Subject
|
let taxiOrderSubject = PublishSubject<RequestStatus>()
|
|
/// 订单Id
|
let orderId = BehaviorRelay<Int>(value: 0)
|
|
/// 获取正在进行中的订单
|
func queryServingOrder() {
|
APIManager.shared.provider.rx
|
.request(.queryServingOrder)
|
.map(YYModel<[QueryServingOrderModel]>.self)
|
.validate()
|
.subscribe(onSuccess: {[unowned self] (model) in
|
guard let data = model.data else{return}
|
if data.count == 0{
|
self.queryIdleDriver()
|
}else{
|
// 查找数据
|
let model = data.filter { (model) -> Bool in
|
return model.orderType == self.orderType.value.rawValue
|
}
|
if model.count == 0{
|
self.queryIdleDriver()
|
}else{
|
self.currentOrderId.accept(model.first?.orderId ?? 0)
|
self.rideType.accept(model.first?.rideType)
|
self.number.accept("您有一笔订单正在进行中")
|
}
|
}
|
}) {[unowned self] (error) in
|
self.queryIdleDriver()
|
}
|
.disposed(by: disposeBag)
|
}
|
|
/// 获取5公里范围内空闲司机数量
|
func queryIdleDriver() {
|
APIManager.shared.provider.rx
|
.request(.queryIdleDriver(lat: Double(YYMapViewManager.share.userLocation.latitude), lon: Double(YYMapViewManager.share.userLocation.longitude), type: orderType.value.rawValue))
|
.map(YYModel<SwitchCityModel>.self)
|
.validate()
|
.subscribe(onSuccess: {[unowned self] (model) in
|
guard let data = model.data else{return}
|
self.number.accept("当前附近有\(data.number)辆车可用")
|
}) { (error) in
|
}
|
.disposed(by: disposeBag)
|
}
|
|
/// 获取首页电话
|
func queryPhones() {
|
APIManager.shared.provider.rx
|
.request(.queryPhones(code: YYLocationManager.shared.currentCityCode))
|
.map(YYModel<[PhonesModel]>.self)
|
.validate()
|
.subscribe(onSuccess: {[unowned self] (model) in
|
guard let data = model.data else{return}
|
for item in data{
|
if item.type == 1{
|
self.policeNumber.accept(item.phone)
|
}else if item.type == 2{
|
self.complaintsNumber.accept(item.phone)
|
}else if item.type == 3{
|
self.diaoduNumber.accept(item.phone)
|
}else if item.type == 4{
|
self.olderCallNumber.accept(item.phone)
|
}else if item.type == 5{
|
// self.olderCallNumber.accept(item.phone)
|
}
|
}
|
}) { (error) in
|
}
|
.disposed(by: disposeBag)
|
}
|
|
/// 获取滚动消息
|
func queryNotices() {
|
APIManager.shared.provider.rx
|
.request(.queryNotices(type: 1))
|
.map(YYModel<[SwitchCityModel]>.self)
|
.validate()
|
.subscribe(onSuccess: {[unowned self] (model) in
|
guard let data = model.data else{return}
|
self.notice.accept(data)
|
}) { (error) in
|
}
|
.disposed(by: disposeBag)
|
}
|
|
/// 下单
|
func taxiOrder() {
|
guard let originInfo = YYMapViewManager.share.originInfo.value,let destination = YYMapViewManager.share.destination.value else {return}
|
taxiOrderSubject.onNext(.loading)
|
let orderType = YYMapViewManager.share.state.value == .appointment ? 2 : 1
|
let substitute = YYMapViewManager.share.passenger.value == nil ? 0 : 1
|
let tipMoney: Double = YYMapViewManager.share.tip.value == nil ? 0 : YYMapViewManager.share.tip.value?.wy_toDouble() ?? 0
|
let timeStamp = DateInRegion(Date(), region: Region(calendar: Calendars.gregorian, zone: Zones.current,locale: Locales.current)).toFormat("yyyy-MM-dd HH:mm")
|
let travelTime = orderType == 2 ? YYMapViewManager.share.timeStamp.value?.toFormat(format: "yyyy-MM-dd HH:mm") ?? timeStamp : timeStamp
|
APIManager.shared.provider.rx
|
.request(.taxiOrder(driverId: driverId.value, endAddress: destination.name, endLat: destination.lat, endLon: destination.lon, orderSource: orderSource.value, orderType: orderType, passengers: YYMapViewManager.share.passenger.value?.name ?? "", passengersPhone: YYMapViewManager.share.passenger.value?.phone ?? "", placementLat: Double(YYMapViewManager.share.userLocation.latitude), placementLon: Double(YYMapViewManager.share.userLocation.longitude), startAddress: originInfo.name, startLat: originInfo.lat, startLon: originInfo.lon, substitute: substitute, tipMoney: tipMoney,travelTime: travelTime))
|
.map(YYModel<SwitchCityModel>.self)
|
.validate()
|
.subscribe(onSuccess: {[unowned self] (model) in
|
guard let data = model.data else{return}
|
self.orderId.accept(data.id)
|
self.taxiOrderSubject.onNext(.success(nil))
|
}) { [unowned self] (error) in
|
self.taxiOrderSubject.onNext(.error(error))
|
}
|
.disposed(by: disposeBag)
|
}
|
|
|
/// 快车下单
|
func specialOrder() {
|
guard let originInfo = YYMapViewManager.share.originInfo.value,let destination = YYMapViewManager.share.destination.value else {return}
|
guard selectedCarType.value?.id ?? 0 != 0 else{
|
taxiOrderSubject.onNext(.error(NSError.init(localizedDescription: "请选择车型")))
|
return
|
}
|
taxiOrderSubject.onNext(.loading)
|
let orderType = YYMapViewManager.share.state.value == .appointment ? 2 : 1
|
let substitute = YYMapViewManager.share.passenger.value == nil ? 0 : 1
|
let timeStamp = DateInRegion(Date(), region: Region(calendar: Calendars.gregorian, zone: Zones.current,locale: Locales.current)).toFormat("yyyy-MM-dd HH:mm")
|
let travelTime = YYMapViewManager.share.timeStamp.value?.toFormat(format: "yyyy-MM-dd HH:mm") ?? timeStamp
|
let serverCarModelId = selectedCarType.value?.id ?? 0
|
APIManager.shared.provider.rx
|
.request(.saveOrderPrivateCar(driverId: driverId.value, endAddress: destination.name, endLat: destination.lat, endLon: destination.lon, orderSource: orderSource.value, orderType: orderType, passengers: YYMapViewManager.share.passenger.value?.name ?? "", passengersPhone: YYMapViewManager.share.passenger.value?.phone ?? "", placementLat: Double(YYMapViewManager.share.userLocation.latitude), placementLon: Double(YYMapViewManager.share.userLocation.longitude), serverCarModelId: serverCarModelId, startAddress: originInfo.name, startLat: originInfo.lat, startLon: originInfo.lon, substitute: substitute, travelTime: travelTime, type: 1, rideType: YYMapViewManager.share.carpoolingType.value.rawValue,peopleNum:YYMapViewManager.share.passengerNum.value))
|
.map(YYModel<SwitchCityModel>.self)
|
.validate()
|
.subscribe(onSuccess: {[unowned self] (model) in
|
guard let data = model.data else{return}
|
self.orderId.accept(data.id)
|
self.selectedCarType.accept(nil)
|
self.taxiOrderSubject.onNext(.success(nil))
|
}) { [unowned self] (error) in
|
self.taxiOrderSubject.onNext(.error(error))
|
}
|
.disposed(by: disposeBag)
|
}
|
|
}
|