DataManager.kt 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. package com.cr.common
  2. import com.cr.map.CaseModel
  3. import com.cr.map.LayerConfigModel
  4. import com.cr.map.LayerModel
  5. import com.cr.models.*
  6. /**
  7. * 操作系统:MAC系统
  8. * 创建者:王成
  9. * 创建日期:2023/4/3 10:59
  10. * 描述:数据操作类
  11. */
  12. class DataManager {
  13. // todo: 2023/4/3 静态方法及属性封装
  14. companion object {
  15. private const val TABLE_AIR_LINE: String = "AIRLINE" // define: 2023/9/19 航线表
  16. /**
  17. * 获取网络服务连接信息
  18. * @return IPAndComModel
  19. */
  20. fun getNetworkLinkInfo(): IPAndComModel {
  21. var sql: String = "SELECT * FROM ipcom where CHECKED = '1'"
  22. var res: List<HashMap<String, String>> = DatabaseBaseManager.getInstance().query(sql)
  23. var map = res[0]
  24. map.let {
  25. return IPAndComModel.initByMap(it)
  26. }
  27. }
  28. /**
  29. * 获取网络连接列表
  30. * @return List<IPAndComModel>
  31. */
  32. fun getNetworkLinks(): List<IPAndComModel> {
  33. var res = mutableListOf<IPAndComModel>()
  34. var sql: String = "SELECT * FROM ipcom order by id"
  35. var qList: List<HashMap<String, String>> = DatabaseBaseManager.getInstance().query(sql)
  36. for (map in qList) {
  37. var item = IPAndComModel.initByMap(map)
  38. res.add(item)
  39. }
  40. return res
  41. }
  42. /**
  43. * 查询指定的连接是否存在
  44. * @param queryItem IPAndComModel 连接信息
  45. * @return Boolean
  46. */
  47. fun queryNetworkLink(queryItem: IPAndComModel): Boolean {
  48. var sql =
  49. "select * from ipcom where ip='${queryItem.ip}' and com='${queryItem.com}' and server='${queryItem.serverName}'"
  50. var qList: List<HashMap<String, String>> = DatabaseBaseManager.getInstance().query(sql)
  51. return qList != null && qList.isNotEmpty()
  52. }
  53. /**
  54. * 更新网络连接选择状态
  55. * @param item IPAndComModel 网络连接
  56. * @param isChecked Boolean 选中状态
  57. * @return Boolean
  58. */
  59. fun updateNetworkChecked(item: IPAndComModel, isChecked: Boolean): Boolean {
  60. var where = "ip='${item.ip}' and com='${item.com}' and server='${item.serverName}'"
  61. var checkedValue = if (isChecked) "1" else "0"
  62. var values = hashMapOf("checked" to checkedValue)
  63. return DatabaseBaseManager.getInstance().update("ipcom", values, where)
  64. }
  65. /**
  66. * 插入新的网络连接
  67. * @param item IPAndComModel 网络连接
  68. * @return Boolean
  69. */
  70. fun insertNetworkLink(item: IPAndComModel): Boolean {
  71. var values = hashMapOf(
  72. "checked" to "1",
  73. "ip" to item.ip,
  74. "com" to item.com,
  75. "server" to item.serverName
  76. )
  77. return DatabaseBaseManager.getInstance().insert("ipcom", values)
  78. }
  79. /**
  80. * 取消所有连接的选中状态
  81. * @return Boolean
  82. */
  83. fun cancelNetworkChecked(): Boolean {
  84. var values = hashMapOf("checked" to "0")
  85. return DatabaseBaseManager.getInstance().update("ipcom", values, "")
  86. }
  87. /**
  88. * 存储账号和密码
  89. * @param userName String 账号
  90. * @param password String 密码
  91. * @return Boolean
  92. */
  93. fun saveUser(userName: String, password: String): Boolean {
  94. // todo: 2023/4/6 由于只保留一条数据 保存前先删除
  95. deleteUser()
  96. // todo: 2023/4/6 定义插入数据
  97. var userMap: HashMap<String, String> = hashMapOf()
  98. userMap["name"] = userName
  99. userMap["password"] = password
  100. userMap["issave"] = "1"
  101. return DatabaseBaseManager.getInstance().insert("user", userMap)
  102. }
  103. /**
  104. * 删除账号和密码
  105. * @return Boolean
  106. */
  107. fun deleteUser(): Boolean {
  108. return DatabaseBaseManager.getInstance().delete("user", "")
  109. }
  110. /**
  111. * 获取存储的账号信息
  112. * @return UserModel
  113. */
  114. fun getUser(): UserModel {
  115. var user = UserModel()
  116. var sql = "SELECT * FROM user"
  117. var qList: List<HashMap<String, String>> = DatabaseBaseManager.getInstance().query(sql)
  118. if (qList != null && qList.isNotEmpty()) {
  119. user.userId = qList[0]["name"]
  120. user.userPwd = qList[0]["password"]
  121. }
  122. return user
  123. }
  124. /**
  125. * 获取切片图层配置
  126. * @return MutableList<LayerModel>
  127. */
  128. fun getTileLayerConfig(): MutableList<LayerModel> {
  129. // todo: 2023/4/13 返回的图层
  130. var layers: MutableList<LayerModel> = mutableListOf()
  131. var sql = "select * from TileLayerConfig order by id"
  132. var qList: List<HashMap<String, String>> =
  133. DatabaseAppConfigManager.getInstance().query(sql)
  134. if (qList != null && qList.isNotEmpty()) {
  135. for (map in qList) {
  136. var lyrName = map["lyrname"]
  137. var lyrIsVisible = map["isvisible"].equals("1")
  138. var lyrUrl = map["lyrurl"]?.replace("/tile/", "")
  139. var model: LayerModel = LayerModel(lyrName!!, lyrIsVisible, lyrUrl!!)
  140. layers.add(model)
  141. }
  142. }
  143. // todo: 2023/4/13 返回
  144. return layers
  145. }
  146. /**
  147. * 获取矢量数据配置
  148. * @return MutableList<LayerConfigModel>
  149. */
  150. fun getVectorLayerConfig(): MutableList<LayerConfigModel> {
  151. // todo: 2023/4/13 定义数据集
  152. var layerList: MutableList<LayerConfigModel> = mutableListOf()
  153. var sql = "SELECT * FROM BaseLayerConfig"
  154. var qList: List<HashMap<String, String>> =
  155. DatabaseAppConfigManager.getInstance().query(sql)
  156. if (qList != null && qList.isNotEmpty()) {
  157. for (map in qList) {
  158. var model = LayerConfigModel(
  159. map["name"]!!,
  160. map["lyrname"]!!,
  161. map["idx"]!!.toInt(),
  162. map["isvisible"].equals("1")
  163. )
  164. layerList.add(model)
  165. }
  166. }
  167. // todo: 2023/4/13 返回数据集合
  168. return layerList
  169. }
  170. /**
  171. * 添加案件点照片
  172. * @param model CaseModel 案件点模型
  173. * @param callback iCompletion 完成回调
  174. */
  175. fun appAppendImages(model: CaseModel, callback: ICompletion<String>) {
  176. // todo: 2023/6/19 先查询是否已经存在
  177. var SQL = String.format(
  178. "select * from WAYIMAGES where wayid='%s' and imgname='%s'",
  179. model.name,
  180. model.imgName
  181. )
  182. var queryList = DatabaseAppUAVManager.getInstance().query(SQL)
  183. if (queryList.isNotEmpty()) {
  184. if (callback != null) callback?.onCompletion(CompletionModel(false, "该照片已经存储!"))
  185. } else {
  186. var values = HashMap<String, String>()
  187. values["wayid"] = model!!.name!!
  188. values["imgname"] = model!!.imgName!!
  189. values["lat"] = model!!.latitude!!.toString()
  190. values["lng"] = model!!.longitude!!.toString()
  191. values["alt"] = model!!.altitude!!.toString()
  192. values["ang"] = model!!.angle!!.toString()
  193. values["isdown"] = "0"
  194. values["date"] = model!!.date!!.toString()
  195. var res = DatabaseAppUAVManager.getInstance().insert("WAYIMAGES", values)
  196. if (res) {
  197. if (callback != null) callback?.onCompletion(CompletionModel(true, ""))
  198. } else {
  199. if (callback != null) callback?.onCompletion(CompletionModel(false, "该照片已经存储!"))
  200. }
  201. }
  202. }
  203. /**
  204. * 根据案件Id查询案件照片的详细信息
  205. * @param caseId String 案件Id
  206. * @param callback iCompletion<List<String>> 回调
  207. */
  208. fun appQueryImages(caseId: String, callback: ICompletion<List<String>>) {
  209. var querySQL = String.format("select * from WAYIMAGES where wayid='%s'", caseId)
  210. var queryList = DatabaseAppUAVManager.getInstance().query(querySQL)
  211. if (queryList.isNotEmpty()) {
  212. var resList = mutableListOf<String>()
  213. for (map in queryList) {
  214. resList.add(map["imgname"].toString())
  215. }
  216. if (callback != null) callback.onCompletion(CompletionModel(true, resList))
  217. } else {
  218. if (callback != null) callback.onCompletion(
  219. CompletionModel(
  220. false,
  221. mutableListOf("未查询到任何信息!")
  222. )
  223. )
  224. }
  225. }
  226. /**
  227. * 存储案件提报快捷描述信息
  228. * @param dataList List<SelModel> 快捷信息列表
  229. * @return Boolean 存储是否成功
  230. */
  231. fun saveCaseSubmitDescription(dataList: List<SelModel>): Boolean {
  232. var isReturn = true;
  233. DatabaseAppUAVManager.getInstance().delete("CASEKjInput", "")
  234. for (model in dataList) {
  235. var value: HashMap<String, String> = hashMapOf()
  236. value["kjid"] = model.code!!
  237. value["kjnr"] = model.name!!
  238. isReturn =
  239. isReturn && DatabaseAppUAVManager.getInstance().insert("CASEKjInput", value)
  240. }
  241. return isReturn
  242. }
  243. /**
  244. * 获取案件提报快捷描述信息
  245. * @return List<SelModel> 快捷描述信息列表
  246. */
  247. fun getCaseSubmitDescription(): List<SelModel> {
  248. var resList = mutableListOf<SelModel>()
  249. var SQL = "select * from CASEKjInput order by kjid;"
  250. var qList = DatabaseAppUAVManager.getInstance().query(SQL)
  251. for (map in qList) {
  252. resList.add(SelModel(map["kjid"]!!, map["kjnr"]!!))
  253. }
  254. return resList
  255. }
  256. /**
  257. * 案件类型本地化
  258. * @param dataList List<SelModel> 案件类型列表
  259. * @return Boolean
  260. */
  261. fun saveCaseType(dataList: List<SelModel>): Boolean {
  262. var isReturn = true;
  263. DatabaseAppUAVManager.getInstance().delete("CASEType", "")
  264. for (model in dataList) {
  265. var value: HashMap<String, String> = hashMapOf()
  266. value["lxid"] = model.code!!
  267. value["lxname"] = model.name!!
  268. isReturn = isReturn && DatabaseAppUAVManager.getInstance().insert("CASEType", value)
  269. }
  270. return isReturn
  271. }
  272. /**
  273. * 获取案件类型快捷描述信息
  274. * @return List<SelModel> 类型信息列表
  275. */
  276. fun getCaseType(): List<SelModel> {
  277. var resList = mutableListOf<SelModel>()
  278. var SQL = "select * from CASEType order by lxid;"
  279. var qList = DatabaseAppUAVManager.getInstance().query(SQL)
  280. for (map in qList) {
  281. resList.add(SelModel(map["lxid"]!!, map["lxname"]!!))
  282. }
  283. return resList
  284. }
  285. /**
  286. * 保存航线点
  287. * @param model CrAircraftLineModel 航线点模型
  288. * @return Int 返回-1表示失败 其他表示保存的Id标识
  289. */
  290. fun saveAircraftLine(model: AircraftWaypointModel): Int {
  291. var resInt: Int = -1
  292. var values: HashMap<String, String> = hashMapOf()
  293. values["date"] = model.createDate
  294. values["lng"] = model.longitude
  295. values["lat"] = model.latitude
  296. values["alt"] = model.altitude
  297. values["angle"] = model.angle
  298. values["type"] = model.type
  299. values["flag"] = model.userId
  300. var isInsert = DatabaseAppUAVManager.getInstance().insert(TABLE_AIR_LINE, values)
  301. if (isInsert) {
  302. var sql = String.format(
  303. "SELECT max(ID) maxid FROM %s where FLAG='%s'",
  304. TABLE_AIR_LINE, model.userId
  305. );
  306. var qList = DatabaseAppUAVManager.getInstance().query(sql)
  307. resInt = qList[0]["maxid"]!!.toInt()
  308. }
  309. return resInt
  310. }
  311. /**
  312. * 查询指定用户的航线统计信息
  313. * @param userId String 用户Id
  314. * @return AircraftLineCountModel 统计信息
  315. */
  316. fun queryAircraftStatisticsInfo(userId: String): AircraftLineCountModel {
  317. var resModel = AircraftLineCountModel()
  318. // todo: 2023/9/19 查询航点总数
  319. var sql = String.format(
  320. "select count(*) count from %s where flag='%s'",
  321. TABLE_AIR_LINE,
  322. userId
  323. )
  324. var qList = DatabaseAppUAVManager.getInstance().query(sql)
  325. resModel.waypointAllCount = qList[0]["count"]!!.toInt()
  326. // todo: 2023/9/19 查询待传航点数
  327. sql = String.format(
  328. "select count(*) count from %s where flag='%s' and type='0'",
  329. TABLE_AIR_LINE, userId
  330. )
  331. qList = DatabaseAppUAVManager.getInstance().query(sql)
  332. resModel.waitUploadWaypointCount = qList[0]["count"]!!.toInt()
  333. // todo: 2023/9/19 查询已上传航点数
  334. sql = String.format(
  335. "select count(*) count from %s where flag='%s' and type='1'",
  336. TABLE_AIR_LINE, userId
  337. )
  338. qList = DatabaseAppUAVManager.getInstance().query(sql)
  339. resModel.yesUploadWaypointCount = qList[0]["count"]!!.toInt()
  340. // todo: 2023/9/19 查询统计信息
  341. sql = String.format(
  342. "SELECT date,COUNT(*) count from (select date(date) date from %s WHERE FLAG = '%s' and TYPE = '0') GROUP BY date",
  343. TABLE_AIR_LINE, userId
  344. )
  345. qList = DatabaseAppUAVManager.getInstance().query(sql)
  346. for (data in qList) {
  347. resModel.appendWaypointDetailInfo(data["date"]!!, data["count"]!!.toInt())
  348. }
  349. return resModel
  350. }
  351. /**
  352. * 查询所有待上传航点数据
  353. * @param userId String 用户Id
  354. * @return List<AircraftWaypointModel>
  355. */
  356. fun queryAllWaitUploadWaypoint(userId:String):List<AircraftWaypointModel>{
  357. val sql = String.format("select * from %s where flag='%s' and type='0'", TABLE_AIR_LINE,userId)
  358. val qList = DatabaseAppUAVManager.getInstance().query(sql)
  359. var resModel = mutableListOf<AircraftWaypointModel>()
  360. for (map in qList){
  361. var model = AircraftWaypointModel(userId)
  362. model.ptId = map["id"]!!
  363. model.longitude = map["lng"]!!
  364. model.latitude = map["lat"]!!
  365. model.altitude = map["alt"]!!
  366. model.angle = map["angle"]!!
  367. resModel.add(model)
  368. }
  369. return resModel
  370. }
  371. /**
  372. * 更新指定航点状态
  373. * @param userId String 用户Id
  374. * @param ptList List<AircraftWaypointModel> 航点集合
  375. * @return Boolean
  376. */
  377. fun updateWaypointState(userId: String,ptList:List<AircraftWaypointModel>):Boolean{
  378. // todo: 2023/9/20 更新的Id集合
  379. var arrayInt = mutableListOf<Int>()
  380. for (pt in ptList){
  381. arrayInt.add(pt.ptId.toInt())
  382. }
  383. // todo: 2023/9/20 组合条件
  384. val strWhere = "flag = '${userId}' and id in (${arrayInt.joinToString(",")})"
  385. // todo: 2023/9/20 更新内容
  386. var valueMap = HashMap<String,String>()
  387. valueMap["type"] = "1"
  388. // todo: 2023/9/20 更新
  389. return DatabaseAppUAVManager.getInstance().update(TABLE_AIR_LINE,valueMap,strWhere)
  390. }
  391. /**
  392. * 删除航点信息
  393. * @param userId String 用户Id
  394. * @return Boolean 删除是否成功
  395. */
  396. fun deleteAircraftPoint(userId: String): Boolean {
  397. val sqlWhere = String.format("flag='%s'", userId)
  398. return DatabaseAppUAVManager.getInstance().delete(TABLE_AIR_LINE,sqlWhere)
  399. }
  400. }
  401. }