1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package cn.flightfeather.thirdapp.repository
 
import cn.flightfeather.thirdapp.bean.*
import cn.flightfeather.thirdapp.common.net.ResponseBodyCallBack
import cn.flightfeather.thirdapp.common.net.ResultCallBack
import cn.flightfeather.thirdapp.common.net.ResultObserver
import cn.flightfeather.thirdapp.common.net.RetrofitFactory
import cn.flightfeather.thirdapp.httpservice.ScenseService
import cn.flightfeather.thirdapp.module.task.Division
import cn.flightfeather.thirdapp.repository.dao.DomainDao
import cn.flightfeather.thirdapp.repository.dao.SceneDao
import io.reactivex.Observable
import io.reactivex.functions.Function4
import okhttp3.ResponseBody
import retrofit2.Response
 
/**
 * @author riku
 * Date: 2019/5/16
 * 场景相关数据获取
 */
class SceneRepository {
 
    private val sceneDao = SceneDao()
    private val domainDao = DomainDao()
    private val retrofit = RetrofitFactory.instance.retrofit
 
    /**
     * 获取场景信息
     */
    fun getScene(sceneId: String, resultCallBack: ResultCallBack<Scense>) {
        val dbService = sceneDao.getSceneByPrimaryKey(sceneId).map {
            Response.success(it)
        }
 
        RetrofitFactory.executeResult(dbService, object : ResultObserver<Scense>() {
            override fun onSuccess(result: Scense?) {
                resultCallBack.onSuccess(result)
            }
 
            override fun onFailure(e: Throwable, isNetWorkError: Boolean) {
                resultCallBack.onFailure()
            }
 
        })
    }
 
    /**
     * 获取行政区划信息
     */
    fun getDivision(resultCallBack: ResultCallBack<Division>) {
        val dbService1 = domainDao.getProvince()
        val dbService2 = domainDao.getCity()
        val dbService3 = domainDao.getDistrict()
        val dbService4 = domainDao.getTown()
 
        val zipService = Observable.zip(dbService1, dbService2, dbService3, dbService4,
                Function4<List<Province>, List<City>, List<District>, List<Town>, Response<Division>> { t1, t2, t3, t4 ->
                    Response.success(
                            Division(
                                    ArrayList(t1),
                                    ArrayList(t2),
                                    ArrayList(t3),
                                    ArrayList(t4)
                            )
                    )
                })
 
        RetrofitFactory.executeResult(zipService, object : ResultObserver<Division>() {
            override fun onSuccess(result: Division?) {
                resultCallBack.onSuccess(result)
            }
 
            override fun onFailure(e: Throwable, isNetWorkError: Boolean) {
                resultCallBack.onFailure()
            }
 
        })
    }
 
    /**
     * 获取场景类型
     */
    fun getSceneType(resultCallBack: ResultCallBack<ArrayList<Domainitem>>) {
        val dbService = domainDao.getSceneType().map {
            Response.success(ArrayList(it))
        }
 
        RetrofitFactory.executeResult(dbService, object : ResultObserver<ArrayList<Domainitem>>() {
            override fun onSuccess(result: ArrayList<Domainitem>?) {
                resultCallBack.onSuccess(result)
            }
 
            override fun onFailure(e: Throwable, isNetWorkError: Boolean) {
                resultCallBack.onFailure()
            }
 
 
        })
    }
 
    /**
     * 新增场景信息
     */
    fun putScene(scene: Scense, resultCallBack: ResultCallBack<ResponseBody>) {
        retrofit.create(ScenseService::class.java).putScense(scene)
                .enqueue(ResponseBodyCallBack(resultCallBack))
    }
 
    /**
     * 更新场景信息
     */
    fun updateScene(scene: Scense, resultCallBack: ResultCallBack<ResponseBody>) {
        retrofit.create(ScenseService::class.java).updateScense(scene)
                .enqueue(ResponseBodyCallBack(resultCallBack))
    }
 
    /**
     * 批量更新场景信息
     */
    fun updateSceneList(sceneList: ArrayList<Scense>, resultCallBack: ResultCallBack<ResponseBody>) {
        retrofit.create(ScenseService::class.java).updateSceneList(sceneList)
                .enqueue(ResponseBodyCallBack(resultCallBack))
    }
}