package com.yidianling.user.mine.http import com.google.gson.Gson import com.ydl.ydlcommon.bean.MustUP import com.ydl.ydlcommon.data.http.* import com.ydl.ydlcommon.utils.NetworkParamsUtils import com.ydl.ydlnet.YDLHttpUtils import com.yidianling.im.message.param.MsgListParam import com.yidianling.user.bean.FundData import com.yidianling.user.bean.Recharge import com.yidianling.user.api.bean.UserResponseBean import com.yidianling.user.mine.* import com.yidianling.user.mine.bean.AccountBean import com.yidianling.user.mine.bean.BalanceBean import com.yidianling.user.mine.bean.FeedBackDetailBean import com.yidianling.user.mine.bean.UserInfoCmd import io.reactivex.Observable import okhttp3.MediaType import okhttp3.RequestBody import java.io.File class MineHttpImpl private constructor() : MineHttp { companion object { fun getInstance(): MineHttpImpl { return Holder.INSTANCE } fun clearAppApi() { Holder.INSTANCE.appApi = null } } private var appApi: MineApi? = null private fun getAppApi(): MineApi { if (appApi == null) { appApi = YDLHttpUtils.obtainApi(MineApi::class.java) } return appApi!! } fun getPostList(crq: BaseCommand): List<FormatText> { return NetworkParamsUtils.getPostList(crq) } fun getMaps(list: List<FormatText>): Map<String, String> { return NetworkParamsUtils.getMaps(list) } override fun getMyFundList(param: FundListParam): Observable<BaseResponse<FundData>> { return RxUtils.mapObservable(param) .flatMap { getAppApi().getMyFundList(it) } } override fun getMyBalance(): Observable<BaseResponse<BalanceBean>> { return getAppApi().getMyBalance() } override fun deleteAccount(param: com.yidianling.user.mine.bean.DefaultAccountCmd): Observable<BaseResponse<Any>> { return RxUtils.mapObservable(param) .flatMap { getAppApi().deleteAccount(it) } } override fun editAccount(param: com.yidianling.user.mine.bean.EditAccountCmd): Observable<BaseResponse<AccountBean>> { return RxUtils.mapObservable(param) .flatMap { getAppApi().editAccount(it) } } override fun feedBack(param: FeedBackParam, files: Array<File>?): Observable<BaseResponse<Any>> { val map = NetworkParamsUtils.getFileMaps(param, "image", files!!) return getAppApi().feedBack(map) } override fun getFeedBackDetail(id: String): Observable<BaseResponse<FeedBackDetailBean>> { return getAppApi().getFeedBackDetail(id).compose(RxUtils.netCheck()) } override fun getRechargeId(param: RechargeParam): Observable<BaseResponse<Recharge>> { return RxUtils.mapObservable(param) .flatMap { getAppApi().getRechargeId(it) } } override fun setDefaultAccount(param: com.yidianling.user.mine.bean.DefaultAccountCmd): Observable<BaseResponse<Any>> { return RxUtils.mapObservable(param) .flatMap { getAppApi().setDefaultAccount(it) } } override fun getAccountList(): Observable<BaseResponse<MutableList<AccountBean>>> { return getAppApi().getAccountList("").compose(RxUtils.netCheck()) } override fun applyAccount(param: com.yidianling.user.mine.bean.WithDrawCmd): Observable<BaseResponse<Any>> { return RxUtils.mapObservable(param) .flatMap { getAppApi().applyAccount(it) } } override fun addAccount(param: com.yidianling.user.mine.bean.AddAccountCmd): Observable<BaseResponse<AccountBean>> { return RxUtils.mapObservable(param) .flatMap { getAppApi().addAccount(it) } } override fun appWillUp(param: APPWillUpParam): Observable<BaseResponse<MustUP>> { return RxUtils.mapObservable(param) .flatMap { getAppApi().appWillUp(it) } } override fun getNewCoupon(param: BaseCommand): Observable<BaseResponse<com.yidianling.user.mine.bean.CouponNumBean>> { val list = NetworkParamsUtils.getPostList(param) return getAppApi().getNewCoupon(NetworkParamsUtils.getMaps(list)) } override fun getUserInfo(): Observable<BaseAPIResponse<UserResponseBean>> { var param: String = Gson().toJson(UserInfoCmd()) val body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), param) return getAppApi().getUserInfo(body).compose(RxUtils.netCheck()) } override fun getSysMsgList(param: MsgListParam): Observable<BaseResponse<String>> { return RxUtils.mapObservable(param) .flatMap { getAppApi().getSysMsgList(it) } } object Holder { val INSTANCE = MineHttpImpl() } }