Flutter app for Asset Management
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

293 行
11 KiB

  1. import 'package:assetstock/util/Models.dart';
  2. import 'package:sqflite/sqflite.dart';
  3. import 'package:path_provider/path_provider.dart';
  4. import 'prefsKey.dart';
  5. import 'dart:io';
  6. import 'dart:async';
  7. import 'package:path/path.dart';
  8. import 'package:intl/intl.dart';
  9. class DBHelper{
  10. DBHelper._();
  11. static final DBHelper database = DBHelper._();
  12. Database _db;
  13. Future<Database> get db async {
  14. if (_db != null) return _db;
  15. _db = await initDb();
  16. return _db;
  17. }
  18. initDb() async {
  19. Directory documentsDirectory = await getApplicationDocumentsDirectory();
  20. String path = join(documentsDirectory.path, "assets.db");
  21. var theDb = await openDatabase(path, version: 1,onCreate: _onCreate);
  22. return theDb;
  23. }
  24. closeDb() async {
  25. if(_db!=null){
  26. final database = await db;
  27. await database.close();
  28. _db = null;
  29. }
  30. }
  31. void _onCreate(Database db, int version) async {
  32. Directory documentsDirectory = await getApplicationDocumentsDirectory();
  33. String path = join(documentsDirectory.path, "assets.db");
  34. File file = File(path);
  35. print('Database created, ${file.lengthSync()}');
  36. setOpenState();
  37. }
  38. insertAsset(Asset newAsset) async{
  39. try{
  40. final database = await db;
  41. await database.rawInsert("Insert into ${tableName.insert} (${columnName.tag_number},${columnName.blob},${columnName.keterangan}) VALUES(?,?,?)", [newAsset.tag_number,newAsset.blob,newAsset.keterangan]);
  42. await database.rawQuery("UPDATE ${tableName.ref} SET ${columnName.flag} = 'TRUE' WHERE ${columnName.tag_number} = '${newAsset.tag_number}'");
  43. return true;
  44. }
  45. catch(e){
  46. print(e);
  47. return null;
  48. }
  49. }
  50. updateAsset(Asset newAsset) async{
  51. try{
  52. final database = await db;
  53. await database.rawUpdate("Update ${tableName.insert} SET ${columnName.blob} = ?, ${columnName.tag_number} = ?, ${columnName.keterangan} = ? WHERE ${columnName.no} = ?", [newAsset.blob,newAsset.tag_number,newAsset.keterangan,newAsset.no]);
  54. return true;
  55. }
  56. catch(e){
  57. print(e);
  58. return null;
  59. }
  60. }
  61. getBlobbyTag(tag) async{
  62. try{
  63. final database = await db;
  64. var res = await database.query(tableName.insert,where: "${columnName.tag_number} = ?",whereArgs: [tag]);
  65. // var a = await database.rawQuery("select length(${columnName.blob}) / 1024 from ${tableName.insert} where ${columnName.no} = $no");
  66. // print(a);
  67. return res.isNotEmpty ? Asset.fromJson(res.first): null;
  68. }
  69. catch(e){
  70. print(e);
  71. return null;
  72. }
  73. }
  74. getBlobbyNo(no) async{
  75. try{
  76. final database = await db;
  77. var res = await database.query(tableName.insert,where: "${columnName.no} = ?",whereArgs: [no]);
  78. // var a = await database.rawQuery("select length(${columnName.blob}) / 1024 from ${tableName.insert} where ${columnName.no} = $no");
  79. // print(a);
  80. return res.isNotEmpty ? Asset.fromJson(res.first): null;
  81. }
  82. catch(e){
  83. print(e);
  84. return null;
  85. }
  86. }
  87. // getRefBlob(tagNumber)async{
  88. // try{
  89. // final database = await db;
  90. // var res = await database.query(tableName.insert,where: "${columnName.tag_number} = ?",whereArgs: [tagNumber]);
  91. // // var a = await database.rawQuery("select count(*) from ${tableName.insert}");
  92. // // print(a);
  93. // return res.isNotEmpty ? Asset.fromJson(res.first): null;
  94. // }
  95. // catch(e){
  96. // print(e);
  97. // return null;
  98. // }
  99. // }
  100. searchbyTagNumber(tagNumber) async{
  101. try{
  102. final database = await db;
  103. var exist = await database.query(tableName.insert,where: "${columnName.tag_number} = ?",whereArgs: [tagNumber]);
  104. var res = await database.query(tableName.ref,where: "${columnName.tag_number} = ?",whereArgs: [tagNumber]);
  105. if(res.isEmpty&&exist.isNotEmpty){
  106. var appendAsset = new Asset();
  107. appendAsset.tag_number=tagNumber;
  108. return {"EXIST":exist.isNotEmpty?true:false,"DATA":appendAsset};
  109. }
  110. else return {"EXIST":exist.isNotEmpty?true:false,"DATA":res.isNotEmpty ? Asset.fromJson(res.first): null};
  111. }
  112. catch(e){
  113. print(e);
  114. return null;
  115. }
  116. }
  117. getAllLocation() async{
  118. try{
  119. final database = await db;
  120. var res = await database.rawQuery("SELECT Distinct UPPER(${columnName.lantai}) ${columnName.lantai} from ${tableName.ref} ORDER BY UPPER(${columnName.lantai})");
  121. List<Asset> list =
  122. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList().reversed.toList() : [];
  123. return list;
  124. }
  125. catch(e){
  126. print(e);
  127. return null;
  128. }
  129. }
  130. getAllRuangan() async{
  131. try{
  132. final database = await db;
  133. var res = await database.rawQuery("SELECT Distinct UPPER(${columnName.ruang}) ${columnName.ruang} from ${tableName.ref} ORDER BY UPPER(${columnName.ruang})");
  134. List<Asset> list =
  135. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList().reversed.toList() : [];
  136. return list;
  137. }
  138. catch(e){
  139. print(e);
  140. return null;
  141. }
  142. }
  143. getLantaiRuangan(lantai) async{
  144. try{
  145. final database = await db;
  146. var res = await database.rawQuery("SELECT Distinct UPPER(${columnName.ruang}) ${columnName.ruang} from ${tableName.ref} WHERE UPPER(${columnName.lantai}) = UPPER('$lantai') ORDER BY UPPER(${columnName.ruang})");
  147. List<Asset> list =
  148. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList().reversed.toList() : [];
  149. return list;
  150. }
  151. catch(e){
  152. print(e);
  153. return null;
  154. }
  155. }
  156. getAllAsset() async {
  157. try{
  158. final database = await db;
  159. var res = await database.rawQuery("SELECT a.${columnName.tag_number}, a.${columnName.asset_desc}, a.${columnName.ruang}, a.${columnName.lantai}, a.${columnName.gedung}, a.${columnName.flag}, b.${columnName.blob} from ${tableName.ref} a LEFT JOIN ${tableName.insert} b on a.${columnName.tag_number} = b.${columnName.tag_number} ORDER BY a.${columnName.flag},a.${columnName.ruang}");
  160. List<Asset> list =
  161. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
  162. return list;
  163. }
  164. catch(e){
  165. print(e);
  166. return null;
  167. }
  168. }
  169. filterAllAsset(search) async {
  170. try{
  171. final database = await db;
  172. var res = await database.rawQuery("SELECT * FROM (SELECT a.${columnName.tag_number}, a.${columnName.asset_desc}, a.${columnName.ruang}, a.${columnName.lantai}, a.${columnName.gedung}, a.${columnName.flag}, b.${columnName.blob} from ${tableName.ref} a LEFT JOIN ${tableName.insert} b on a.${columnName.tag_number} = b.${columnName.tag_number}) WHERE UPPER(${columnName.tag_number}) Like '%$search%' ORDER BY ${columnName.flag},${columnName.ruang}");
  173. List<Asset> list =
  174. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
  175. return list;
  176. }
  177. catch(e){
  178. print(e);
  179. return null;
  180. }
  181. }
  182. getAllInsertAsset() async {
  183. try{
  184. final database = await db;
  185. // var res = await database.rawQuery("SELECT a.*, b.${columnName.asset_desc}, b.${columnName.gedung}, b.${columnName.lantai}, b.${columnName.ruang} FROM ${tableName.insert} a, ${tableName.ref} b WHERE a.${columnName.tag_number} = b.${columnName.tag_number}");
  186. var res = await database.rawQuery("select a.*, b.${columnName.asset_desc}, b.${columnName.gedung}, b.${columnName.lantai}, b.${columnName.ruang} from ${tableName.insert} a LEFT JOIN ${tableName.ref} b ON a.${columnName.tag_number} = b.${columnName.tag_number}");
  187. List<Asset> list =
  188. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
  189. return list;
  190. }
  191. catch(e){
  192. print(e);
  193. return null;
  194. }
  195. }
  196. deleteInsertAsset(no) async{
  197. try{
  198. final database = await db;
  199. // await database.rawUpdate("Update ${tableName.insert} SET ${columnName.blob} = ?, ${columnName.tag_number} = ?, ${columnName.keterangan} = ? WHERE ${columnName.no} = ?", [newAsset.blob,newAsset.tag_number,newAsset.keterangan,newAsset.no]);
  200. await database.delete(tableName.insert,where: "${columnName.no} = ?",whereArgs: [no]);
  201. return true;
  202. }
  203. catch(e){
  204. print(e);
  205. return null;
  206. }
  207. }
  208. filterAllInsertAsset(search) async {
  209. try{
  210. final database = await db;
  211. // var res = await database.rawQuery("SELECT * FROM (SELECT a.${columnName.no},a.${columnName.keterangan},a.${columnName.tag_number},a.${columnName.blob}, b.${columnName.asset_desc}, b.${columnName.gedung}, b.${columnName.lantai}, b.${columnName.ruang} FROM ${tableName.insert} a, ${tableName.ref} b WHERE a.${columnName.tag_number} = b.${columnName.tag_number}) WHERE UPPER(${columnName.tag_number}) Like '%$search%'");
  212. var res = await database.rawQuery("SELECT * FROM (select a.*, b.${columnName.asset_desc}, b.${columnName.gedung}, b.${columnName.lantai}, b.${columnName.ruang} from ${tableName.insert} a LEFT JOIN ${tableName.ref} b ON a.${columnName.tag_number} = b.${columnName.tag_number}) WHERE UPPER(${columnName.tag_number}) Like '%$search%'");
  213. List<Asset> list =
  214. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
  215. return list;
  216. }
  217. catch(e){
  218. print(e);
  219. return null;
  220. }
  221. }
  222. countRows(tableName)async{
  223. try{
  224. final database = await db;
  225. var res = await database.rawQuery("SELECT Count(*) Count FROM $tableName");
  226. return res.isEmpty?0:Count.fromJson(res.first).count;
  227. }
  228. catch(e){
  229. print(e);
  230. return null;
  231. }
  232. }
  233. getDbName()async{
  234. try{
  235. final database = await db;
  236. var res = await database.rawQuery("SELECT ${columnName.value} FROM ${tableName.key} where ${columnName.key} = 'DB_MASTER_NAME'");
  237. return res.isEmpty?null:res.first[columnName.value];
  238. }
  239. catch(e){
  240. print(e);
  241. return null;
  242. }
  243. }
  244. getBUnit()async{
  245. try{
  246. final database = await db;
  247. var res = await database.rawQuery("SELECT ${columnName.value} FROM ${tableName.key} where ${columnName.key} = 'BUSINESS_UNIT'");
  248. return res.isEmpty?null:res.first[columnName.value];
  249. }
  250. catch(e){
  251. print(e);
  252. return null;
  253. }
  254. }
  255. setOpenState()async{
  256. try{
  257. final database = await db;
  258. var check_KEY = await database.rawQuery("SELECT 1 FROM ${tableName.key} where ${columnName.key} = 'STATE'");
  259. if (check_KEY.length<=0){
  260. await database.insert(tableName.key, {columnName.key:"STATE",columnName.value:"OPEN"});
  261. }
  262. else{
  263. await database.update(tableName.key, {columnName.value:"OPEN"},where: "${columnName.key} = ?",whereArgs: ['STATE']);
  264. }
  265. await database.update(tableName.key, {columnName.value:DateFormat("YYYY-MM-DD HH:mm:ss").format(DateTime.now())},where: "${columnName.key} = ?",whereArgs: ['START_DATE']);
  266. }
  267. catch(e){
  268. print(e);
  269. return null;
  270. }
  271. }
  272. }