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
126
127
128
129
130
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>) {
        sceneDao.insert(scene)
        retrofit.create(ScenseService::class.java).putScense(scene)
                .enqueue(ResponseBodyCallBack(resultCallBack))
    }
 
    /**
     * 更新场景信息
     */
    fun updateScene(scene: Scense, resultCallBack: ResultCallBack<ResponseBody>) {
        sceneDao.update(scene)
        retrofit.create(ScenseService::class.java).updateScense(scene)
                .enqueue(ResponseBodyCallBack(resultCallBack))
    }
 
    /**
     * 批量更新场景信息
     */
    fun updateSceneList(sceneList: ArrayList<Scense>, resultCallBack: ResultCallBack<ResponseBody>) {
        sceneList.forEach {
            sceneDao.update(it)
        }
        retrofit.create(ScenseService::class.java).updateSceneList(sceneList)
                .enqueue(ResponseBodyCallBack(resultCallBack))
    }
}