//
|
// YardBookingDetailVC.swift
|
// WanPai
|
//
|
// Created by 无故事王国 on 2023/9/13.
|
//
|
|
import UIKit
|
import JQTools
|
|
class YardBookingDetailVC: BaseVC {
|
|
@IBOutlet weak var label_title: UILabel!
|
@IBOutlet weak var label_type: UILabel!
|
@IBOutlet weak var label_address: UILabel!
|
@IBOutlet weak var label_yardName: UILabel!
|
@IBOutlet weak var label_bookingType: UILabel!
|
@IBOutlet weak var label_halfYardName: UILabel!
|
@IBOutlet weak var label_bookingPerson: UILabel!
|
@IBOutlet weak var label_contact: UILabel!
|
@IBOutlet weak var label_paymentPrice: UILabel!
|
@IBOutlet weak var label_bookingTime: UILabel!
|
@IBOutlet weak var label_paymentTime: UILabel!
|
@IBOutlet weak var view_paymentTime: UIView!
|
@IBOutlet weak var label_usedState: UILabel!
|
@IBOutlet weak var img_QRCode: UIImageView!
|
@IBOutlet weak var view_qrCode: UIView!
|
@IBOutlet weak var btn_cancel: UIButton!
|
@IBOutlet weak var btn_payment: UIButton!
|
@IBOutlet weak var view_halfYard: UIView!
|
@IBOutlet weak var btn_call: UIButton!
|
@IBOutlet weak var cons_cancelWidth: NSLayoutConstraint!
|
@IBOutlet weak var label_descInfo: UILabel!
|
@IBOutlet weak var view_yard: UIView!
|
@IBOutlet weak var label_dealtime: UILabel!
|
|
private var timer:Timer?
|
private var siteBookingId:Int?
|
private var yardBookingModel:YardBookingModel?
|
private var yardBookingDetailDataModel:YardBookingDetailDataModel?
|
|
init(model:YardBookingModel) {
|
super.init(nibName: nil, bundle: nil)
|
self.yardBookingModel = model
|
}
|
|
init(siteBookingId:Int) {
|
super.init(nibName: nil, bundle: nil)
|
self.siteBookingId = siteBookingId
|
}
|
|
required init?(coder: NSCoder) {
|
fatalError("init(coder:) has not been implemented")
|
}
|
|
override func viewDidDisappear(_ animated: Bool) {
|
super.viewDidDisappear(animated)
|
timer?.invalidate()
|
}
|
|
override func viewDidLoad() {
|
super.viewDidLoad()
|
title = "我的预约"
|
getData()
|
|
yy_popBlock = {[weak self] () in
|
guard let weakSelf = self else { return }
|
var popToVc:UIViewController?
|
if weakSelf.navigationController!.viewControllers.contains(where: {$0 is YardBookingListVC}){
|
weakSelf.navigationController?.popViewController();return
|
}
|
for vc in weakSelf.navigationController!.viewControllers{
|
if vc is YardListVC{popToVc = vc;break}
|
}
|
|
if popToVc != nil{
|
weakSelf.navigationController?.popToViewController(popToVc!, animated: true)
|
}else{
|
weakSelf.navigationController?.popViewController()
|
}
|
}
|
}
|
|
private func getData(){
|
var id = 0
|
if yardBookingModel != nil{
|
id = yardBookingModel!.id
|
}else{
|
id = siteBookingId!
|
}
|
|
Services.siteDetail(id: id).subscribe(onNext: {[weak self] data in
|
if let model = data.data?.data{
|
self?.yardBookingDetailDataModel = model
|
|
self?.label_title.text = data.data!.siteName
|
self?.label_address.text = String(format: "%@(%@)", data.data!.shopName,data.data!.shopAddress)
|
self?.label_type.text = data.data!.siteType
|
self?.view_yard.isHidden = data.data!.siteType.isEmpty
|
|
self?.label_yardName.text = model.nextName
|
self?.label_yardName.isHidden = model.nextName.isEmpty
|
self?.label_bookingType.text = model.isHalf == 1 ? "半场":"全场"
|
self?.view_halfYard.isHidden = model.isHalf != 1
|
self?.label_halfYardName.text = model.halfName
|
self?.label_bookingPerson.text = model.booker
|
self?.label_contact.text = model.phone
|
|
switch model.payType {
|
case .aliPay,.wechat:
|
self?.label_paymentPrice.text = model.payMoney.currency()
|
case .courseNum:
|
self?.label_paymentPrice.text = model.payMoney.string + "课时"
|
case .coin:
|
self?.label_paymentPrice.text = model.payMoney.int.string + "币"
|
default:break
|
}
|
|
self?.label_bookingTime.text = model.times
|
self?.label_usedState.text = model.status.titleRaw
|
self?.label_paymentTime.text = Date.jq_format(TimeInterval(model.payTime / 1000), formatter: "yyyy-MM-dd HH:mm")
|
self?.view_paymentTime.isHidden = model.payTime == 0
|
|
switch model.status {
|
case .waitPayment:
|
self?.label_paymentTime.text = "待支付"
|
self?.label_usedState.text = "待支付"
|
self?.label_paymentTime.textColor = UIColor(hexStr: "#F44444")
|
self?.label_usedState.textColor = UIColor(hexStr: "#F44444")
|
self?.view_qrCode.isHidden = true
|
self?.btn_payment.isHidden = false
|
|
case .cancel,.complete,.overdue:
|
self?.btn_payment.isHidden = true
|
self?.btn_cancel.isHidden = true
|
self?.view_qrCode.isHidden = true
|
|
case .inStore:
|
self?.btn_payment.isHidden = true
|
self?.btn_cancel.isHidden = true
|
self?.showQRCode(model)
|
|
case .pending:
|
self?.btn_payment.isHidden = true
|
self?.btn_cancel.isHidden = false
|
self?.showQRCode(model)
|
self?.startTimer(timeZone: model.times)
|
default:
|
break
|
}
|
}
|
}) { error in
|
|
}.disposed(by: disposeBag)
|
}
|
|
override func setUI() {
|
let text = "您已经预约成功,请在预约时段扫码此二维码入场。您可以在“预约场地-已预约场地-详情”页面找到此二维码。"
|
let attribute = AttributedStringbuilder.build().add(string: text, withFont: UIFont.systemFont(ofSize: 12, weight: .medium), withColor: .black.withAlphaComponent(0.43),lineSpace: 5).mutableAttributedString
|
label_descInfo.attributedText = attribute
|
label_dealtime.isHidden = true
|
}
|
|
|
private func startTimer(timeZone:String){
|
guard let startTime = yardBookingDetailDataModel?.startTime else {return}
|
let d = Date(timeIntervalSince1970: TimeInterval(startTime / 1000))
|
if Date().timeIntervalSince1970 > d.timeIntervalSince1970{return}
|
label_dealtime.isHidden = false
|
timer = Timer(timeInterval: 1.0, repeats: true, block: {[weak self] t in
|
let datatime = Date.jq_CalBySet(startDate: Date(), endDate:d, set: [.day,.second,.hour,.minute])
|
|
if datatime.day > 0 || datatime.hour > 0 || datatime.minute > 0 || datatime.second > 0{
|
if datatime.day > 0{
|
self?.label_dealtime.text = String(format: "距可入场时间:%02ld天%02ld小时%02ld分%02ld秒", datatime.day,datatime.hour,datatime.minute,datatime.second)
|
}else if datatime.hour == 0 && datatime.day == 0{
|
self?.label_dealtime.text = String(format: "距可入场时间:%02ld分%02ld秒",datatime.minute,datatime.second)
|
}else if datatime.day == 0{
|
self?.label_dealtime.text = String(format: "距可入场时间:%02ld小时%02ld分%02ld秒", datatime.hour,datatime.minute,datatime.second)
|
}
|
}else{
|
t.invalidate()
|
self?.label_dealtime.isHidden = true
|
}
|
})
|
|
RunLoop.current.add(timer!, forMode: .common)
|
timer?.fire()
|
}
|
|
private func showQRCode(_ model:YardBookingDetailDataModel){
|
|
guard model.goType == 0 else {
|
//入园方式是手环,隐藏Code
|
view_qrCode.isHidden = true;return
|
}
|
|
if let m = yardBookingDetailDataModel{
|
let date = m.times.components(separatedBy: " ").first!
|
let time = m.times.components(separatedBy: " ").last!
|
|
let firstTime = time.components(separatedBy: "-").first!
|
let lastTime = time.components(separatedBy: "-").last!
|
|
let formatFirstTime = Date.jq_StringToTimeInterval(String(format: "%@ %@", date,firstTime), "yyyy-MM-dd HH:mm")
|
let formatLastTime = Date.jq_StringToTimeInterval(String(format: "%@ %@", date,lastTime), "yyyy-MM-dd HH:mm")
|
|
let t = OpenDoorTimeModel(start_time: formatFirstTime, end_time: formatLastTime)
|
let openDoorModel = OpenDoorModel(sid: m.sid, rid: m.rid, uid: m.appUserId, time: [t], type: 2)
|
if let modelStr = openDoorModel.toJSONString(){
|
img_QRCode.image = QRCodeImage(string: modelStr, size: 132 * sceneDelegate!.window!.screen.scale)
|
}
|
}
|
}
|
|
@IBAction func callAction(_ sender: UIButton) {
|
guard let phone = yardBookingDetailDataModel?.storePhone else {return}
|
UIApplication.shared.open(URL(string: "tel://\(phone)")!, options: [:], completionHandler: nil)
|
}
|
|
|
@IBAction func cancelAction(_ sender: UIButton) {
|
|
var id = 0
|
if yardBookingModel != nil{
|
id = yardBookingModel!.id
|
}else{
|
id = siteBookingId!
|
}
|
|
CommonAlertView.show(title: "提示", content: "确认取消本次的预约吗?") {[weak self] status in
|
if status{
|
guard let weakSelf = self else { return }
|
Services.cancelMySite(id: id).subscribe(onNext: {[weak self] data in
|
// weakSelf.getData()
|
NotificationCenter.default.post(name: RefreshBooking_Noti, object: nil)
|
self?.navigationController?.popViewController()
|
}) { error in
|
|
}.disposed(by: weakSelf.disposeBag)
|
}
|
}
|
}
|
|
@IBAction func paymentAction(_ sender: UIButton) {
|
|
var id = 0
|
if yardBookingModel != nil{
|
id = yardBookingModel!.id
|
}else{
|
id = siteBookingId!
|
}
|
|
Services.continuePaymentPrice(id: id).subscribe(onNext: {data in
|
if let model = data.data{
|
PaymentView.show(enumType: .yard, money: (ali: model.cash, wx: model.cash, coin: model.playPaiCoin, course: nil,integral:nil)) { [weak self] paytype in
|
guard let weakSelf = self else { return }
|
Services.continuePayment(id: id, payType: paytype).subscribe(onNext: {data in
|
if let m = data.data{
|
NotificationCenter.default.post(name: RefreshBooking_Noti, object: nil)
|
switch paytype {
|
case .aliPay:
|
YYPaymentManager.shared.sendPaymentRequest(YYAlipayRequest(orderString: m.orderString)) { result in
|
switch result {
|
case .success:
|
self?.getData()
|
let vc = PaymentResultVC(result: .success, objType: .activityApply)
|
self?.push(vc: vc)
|
case .cancel:
|
alert(msg: "交易取消")
|
case .failure(_):
|
let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .activityApply)
|
self?.push(vc: vc)
|
}
|
}
|
case .wechat:
|
YYPaymentManager.shared.sendPaymentRequest(YYWeChatPayRequest(partnerId: m.partnerid, prepayId: m.prepayid, package: m.package, nonceStr: m.noncestr, timeStamp: m.timestamp, sign: m.sign)) { result in
|
switch result {
|
case .success:
|
self?.getData()
|
let vc = PaymentResultVC(result: .success, objType: .activityApply)
|
self?.push(vc: vc)
|
case .cancel:
|
alert(msg: "交易取消")
|
case .failure(_):
|
let vc = PaymentResultVC(result: .fail("交易失败",0), objType: .activityApply)
|
JQ_currentViewController().jq_push(vc: vc)
|
}
|
}
|
case .coin,.free:
|
let vc = PaymentResultVC(result: .success, objType: .activityApply)
|
self?.push(vc: vc)
|
case .courseNum:break
|
default:break
|
}
|
}
|
}) {[weak self] error in
|
if let er = error as? NetworkRequest.NetRequestError{
|
switch er {
|
case .Other(let code,let string):
|
let vc = PaymentResultVC(result: .fail(string,code), objType: .activityApply)
|
self?.push(vc: vc)
|
default:
|
let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .activityApply)
|
self?.push(vc: vc)
|
}
|
}
|
}.disposed(by: weakSelf.disposeBag)
|
}
|
}
|
}) { error in
|
|
}.disposed(by: disposeBag)
|
}
|
}
|