sqlite.uts 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991
  1. import {createSQLiteContext} from '@/uni_modules/uni-sqlContext'
  2. import {selectSqlOptions,executeSqlOptions, executeSqlOptionsResult,selectSqlOptionsResult,transactionResult, ICreateSQLiteContextError } from '@/uni_modules/uni-sqlContext/utssdk/interface.uts'
  3. // 数据库名称 - 确保包含.db后缀
  4. const dbName = 'QT800.db'
  5. // 数据库地址,推荐以下划线为开头 _doc/xxx.db
  6. // 如果路径不为_downloads/xxx.db,在手机中会找不到文件夹(强烈建议:不要修改路径)
  7. const dbPath = '/www/static/db/QT800'
  8. // 注意:根据接口定义,createSQLiteContext函数只接受一个参数
  9. // 不需要指定外部路径,路径相关配置已不再使用
  10. // const dbPath = '/www/static/db/qt_app_800'
  11. // 普通函数
  12. // 查询获取数据库里的数据 sql:'SELECT * FROM dbTable WHERE lname = 'lvalue''
  13. // 查询 SELECT * FROM 、 dbTable 是表名、 WHERE 查找条件 lname,lvalue 是查询条件的列名和列值
  14. // @param {Object} dbTable:表名
  15. // @param {Object} lname:列名
  16. // @param {Object} lvalue:列中的属性值
  17. export function selectTableData (
  18. dbTable: string,
  19. lname?: string,
  20. lvalue?: string,
  21. cc?: string,
  22. dd?: string,
  23. ):Promise<UTSJSONObject>
  24. {
  25. if (dbTable !== null) {
  26. // 第一个是表单名称,后两个参数是列表名,用来检索
  27. var sql = '';
  28. if (lname !== null && cc !== null) {
  29. // 两个检索条件
  30. sql = `SELECT * FROM ${dbTable} WHERE ${lname} = '${lvalue}' AND ${cc} = '${dd}'`
  31. }
  32. if (lname !== null && cc == null) {
  33. // 一个检索条件
  34. sql = `SELECT * FROM ${dbTable} WHERE ${lname} = '${lvalue}'`
  35. // console.log(sql);
  36. }
  37. if (lname !== null && lvalue == null && cc == null && dd == null) {
  38. //单条件,并且是拼接好的查询条件
  39. sql = `SELECT * FROM ${dbTable} WHERE ${lname}`
  40. }
  41. if (lname == null) {
  42. sql = `SELECT * FROM ${dbTable}`
  43. }
  44. // 注意:根据接口定义,createSQLiteContext函数只接受一个参数
  45. const sqlite = createSQLiteContext(dbName);
  46. console.log(sql)
  47. return new Promise<UTSJSONObject>((resolve, reject) => {
  48. const selectSqlOptions ={
  49. sql: sql,
  50. success: (e: selectSqlOptionsResult) => {
  51. console.log(e)
  52. },
  53. fail: (e: selectSqlOptionsResult) => {
  54. console.error(e)
  55. }
  56. } as selectSqlOptions
  57. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  58. console.log(info)
  59. const ret = {
  60. errMsg: info?.errMsg ?? '',
  61. data: info?.data ?? ['']
  62. } as UTSJSONObject
  63. resolve(ret)
  64. });
  65. } else {
  66. return new Promise<UTSJSONObject>((resolve, reject) => {
  67. const ret = {
  68. errMsg: '错误查询',
  69. data : ['表名不存在']
  70. } as UTSJSONObject
  71. resolve(ret);
  72. })
  73. }
  74. }
  75. // 普通函数
  76. // 查询获取数据库里的数据 sql:'SELECT a.*,b.name FROM dbTable a LEFTJOIN joinTbName j on a.pid = j.id WHERE lname = 'lvalue''
  77. // 查询 SELECT * FROM 、 dbTable 是表名、 WHERE 查找条件 lname,lvalue 是查询条件的列名和列值
  78. // @param {Object} dbTable:表名
  79. // @param {Object} lname:列名
  80. // @param {Object} lvalue:列中的属性值
  81. export function selectJoinTableData (
  82. dbTable: string,
  83. joinTable: string,
  84. labels: string,
  85. joinCondition: string,
  86. lname?: string,
  87. lvalue?: string,
  88. others?: string
  89. ):Promise<UTSJSONObject>
  90. {
  91. if (dbTable !== null && joinTable !== null && labels !== null && joinCondition !== null ) {
  92. // 第一个是表单名称,后两个参数是列表名,用来检索
  93. var sql = `SELECT ${labels} FROM ${dbTable} LEFT JOIN ${joinTable} ON ${joinCondition} `;
  94. if(lname !== null && lvalue !== null){
  95. sql = sql+ `WHERE ${lname} = '${lvalue}'`;
  96. }
  97. if(others !== null){
  98. sql = sql + others;
  99. }
  100. const sqlite = createSQLiteContext(dbName);
  101. return new Promise<UTSJSONObject>((resolve, reject) => {
  102. const selectSqlOptions ={
  103. sql: sql,
  104. success: (e: selectSqlOptionsResult) => {
  105. console.log(e)
  106. },
  107. fail: (e: selectSqlOptionsResult) => {
  108. console.error(e)
  109. }
  110. } as selectSqlOptions
  111. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  112. console.log(info)
  113. const ret = {
  114. errMsg: info?.errMsg ?? '',
  115. data: info?.data ?? ['']
  116. } as UTSJSONObject
  117. resolve(ret)
  118. });
  119. } else {
  120. return new Promise<UTSJSONObject>((resolve, reject) => {
  121. const ret = {
  122. errMsg: '错误查询',
  123. data : ['表名不存在']
  124. } as UTSJSONObject
  125. resolve(ret);
  126. })
  127. }
  128. }
  129. // 箭头函数
  130. // 根据条件向表格里添加数据 有数据更新、无数据插入
  131. // (建表时需要设置主键) 例如 --- "roomid" varchar(50) PRIMARY KEY
  132. // @param {Object} dbTable:表名
  133. // @param {Object} data : 插入表中的值结构
  134. // @param {Object} condition : 插入表中对应的列的属性名称结构
  135. export function insertOrReplaceData(dbTable: string, data: string, condition?: string): Promise<UTSJSONObject> {
  136. // 判断有没有传参
  137. if (dbTable !== null && data !== null) {
  138. if (condition == null) {
  139. var sql = `INSERT OR REPLACE INTO ${dbTable} VALUES(${data})`
  140. } else {
  141. var sql = `INSERT OR REPLACE INTO ${dbTable} (${condition}) VALUES(${data})`
  142. }
  143. const sqlite = createSQLiteContext(dbName);
  144. // console.log(sql);
  145. return new Promise((resolve, reject) => {
  146. const executeSqlOptions ={
  147. sql: sql,
  148. success: (e: executeSqlOptionsResult) => {
  149. console.log(e)
  150. },
  151. fail: (e: executeSqlOptionsResult) => {
  152. console.error(e)
  153. }
  154. } as executeSqlOptions
  155. const info = sqlite.executeSql(executeSqlOptions) as executeSqlOptionsResult
  156. console.log(info)
  157. const ret = {
  158. errMsg: info?.errMsg ?? '',
  159. data: info?.data ?? ['']
  160. } as UTSJSONObject
  161. resolve(ret)
  162. })
  163. } else {
  164. return new Promise((resolve, reject) => {
  165. reject('错误添加')
  166. })
  167. }
  168. }
  169. // 普通函数
  170. // 向表格里添加数据 sql:'INSERT INTO dbTable VALUES('x','x','x')' 对应新增
  171. // 或者 sql:'INSERT INTO dbTable ('x','x','x') VALUES('x','x','x')' 具体新增
  172. // 插入 INSERT INTO 、 dbTable 是表名、根据表头列名插入列值
  173. // @param {Object} dbTable:表名
  174. // @param {Object} data : 插入表中的值结构
  175. // @param {Object} condition : 插入表中对应的列的属性名称结构
  176. export function insertTableData(dbTable: string, data: string, condition?: string) : Promise<UTSJSONObject>{
  177. // 判断有没有传参
  178. if (dbTable !== null && data !== null) {
  179. // 判断传的参是否有值
  180. var bol = JSON.stringify(data) == '{}'
  181. if (!bol) {
  182. var sql = ''
  183. if (condition == null) {
  184. sql = `INSERT INTO ${dbTable} VALUES (${data})`
  185. } else {
  186. sql = `INSERT INTO ${dbTable} (${condition}) VALUES(${data})`
  187. }
  188. console.log(sql)
  189. const sqlite = createSQLiteContext(dbName);
  190. return new Promise((resolve, reject) => {
  191. const executeSqlOptions ={
  192. sql: sql,
  193. success: (e: executeSqlOptionsResult) => {
  194. console.log(e)
  195. // 插入成功后,执行查询获取最后插入的ID
  196. const lastIdSql = 'SELECT last_insert_rowid() as lastId';
  197. const selectOptions ={
  198. sql: lastIdSql,
  199. success: (idResult: selectSqlOptionsResult) => {
  200. console.log('获取最后插入ID:', idResult);
  201. },
  202. fail: (idError: selectSqlOptionsResult) => {
  203. console.error('获取最后插入ID失败:', idError);
  204. }
  205. } as selectSqlOptions;
  206. sqlite.selectSql(selectOptions);
  207. },
  208. fail: (e: executeSqlOptionsResult) => {
  209. console.error(e)
  210. }
  211. } as executeSqlOptions
  212. // 先执行插入操作
  213. const info = sqlite.executeSql(executeSqlOptions) as executeSqlOptionsResult;
  214. // 再执行获取最后插入ID的查询
  215. const lastIdSql = 'SELECT last_insert_rowid() as lastId';
  216. const lastIdOptions ={
  217. sql: lastIdSql
  218. } as selectSqlOptions;
  219. const lastIdResult = sqlite.selectSql(lastIdOptions) as selectSqlOptionsResult;
  220. // 提取最后插入的ID
  221. const lastId = lastIdResult?.data != null && lastIdResult.data.length > 0 ? lastIdResult.data[0]['lastId'] : null;
  222. console.log('最后插入的ID:', lastId);
  223. const ret = {
  224. errMsg: info?.errMsg ?? '',
  225. data: info?.data ?? [''],
  226. lastId: lastId // 返回最后插入的ID
  227. } as UTSJSONObject;
  228. sqlite.close();
  229. resolve(ret);
  230. })
  231. } else {
  232. return new Promise((resolve, reject) => {
  233. reject('错误添加')
  234. })
  235. }
  236. } else {
  237. return new Promise((resolve, reject) => {
  238. reject('错误添加')
  239. })
  240. }
  241. }
  242. // 普通函数
  243. // 修改数据表里的数据 sql:"UPDATE dbTable SET 列名 = '列值',列名 = '列值' WHERE lname = 'lvalue'"
  244. // 修改 UPDATE 、 dbTable 是表名, data: 要修改的列名=修改后列值, lname,lvalue 是查询条件的列名和列值
  245. // @param {Object} dbTable:表名
  246. // @param {Object} data : 修改表中的值结构
  247. // @param {Object} lname:列名
  248. // @param {Object} lvalue:列中的属性值
  249. export function updateTableData(dbTable: string, data: string, lname?: string, lvalue?: string) : Promise<UTSJSONObject> {
  250. var sql = ''
  251. if (lname == null) {
  252. sql = `UPDATE ${dbTable} SET ${data}`
  253. } else {
  254. sql = `UPDATE ${dbTable} SET ${data} WHERE ${lname} = '${lvalue}'`
  255. }
  256. const sqlite = createSQLiteContext(dbName);
  257. console.log(sql)
  258. // WHERE 前面是要修改的列名、列值,后面是条件的列名、列值
  259. return new Promise((resolve, reject) => {
  260. const executeSqlOptions ={
  261. sql: sql,
  262. success: (e: executeSqlOptionsResult) => {
  263. console.log(e)
  264. },
  265. fail: (e: executeSqlOptionsResult) => {
  266. console.error(e)
  267. }
  268. } as executeSqlOptions
  269. const info = sqlite.executeSql(executeSqlOptions) as executeSqlOptionsResult
  270. console.log(info)
  271. const ret = {
  272. errMsg: info?.errMsg ?? '',
  273. data: (info?.data != null && info.data.length > 0) ? info.data[0] : {}
  274. } as UTSJSONObject
  275. sqlite.close();
  276. resolve(ret)
  277. })
  278. }
  279. // 箭头函数
  280. // 获取指定数据条数 sql:"SELECT * FROM dbTable ORDER BY 'id' DESC LIMIT 15 OFFSET 'num'"
  281. // dbTable 表名, ORDER BY 代表排序默认正序, id 是排序的条件 DESC 代表倒序,从最后一条数据开始拿
  282. // LIMIT 15 OFFSET '${num}',这句的意思是跳过 num 条拿 15 条数据, num 为跳过多少条数据是动态值
  283. // 例 初始num设为0,就从最后的数据开始拿15条,下次不拿刚获取的数据,所以可以让num为15,这样就能一步一步的拿完所有的数据
  284. // @param {Object} dbTable:表名
  285. // @param {Object} id:数据id
  286. /**
  287. * @param {Object} num 例子如下:
  288. * select * from boot limit 10 offset 0;
  289. * select * from boot limit 10 offset 10;
  290. * select * from boot limit 10 offset 20;
  291. * select * from boot limit 10 offset 30;
  292. * 比如说每页数量为 10 条,然后我们分别获区第1、2、3、4页的数据
  293. *
  294. */
  295. export function pullSQL(dbTable: string, id: string, num: number) : Promise<UTSJSONObject> {
  296. var sql = `SELECT * FROM ${dbTable} ORDER BY ${id} DESC LIMIT 10 OFFSET '${num}'`
  297. const sqlite = createSQLiteContext(dbName);
  298. return new Promise((resolve, reject) => {
  299. const selectSqlOptions ={
  300. sql: sql,
  301. success: (e: selectSqlOptionsResult) => {
  302. console.log(e)
  303. },
  304. fail: (e: selectSqlOptionsResult) => {
  305. console.error(e)
  306. }
  307. } as selectSqlOptions
  308. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  309. console.log(info)
  310. const ret = {
  311. errMsg: info?.errMsg ?? '',
  312. data: info?.data ?? ['']
  313. } as UTSJSONObject
  314. sqlite.close();
  315. resolve(ret)
  316. })
  317. }
  318. // 获取统计值
  319. // @param {Object} lvalue:关联主表id
  320. export function selectRecordData(
  321. dbTable: string,
  322. lvalue ?: string
  323. ) : Promise<UTSJSONObject> {
  324. var sql = '';
  325. if (lvalue !== null && dbTable !== null) {
  326. sql = `SELECT
  327. pid,
  328. part,
  329. step,
  330. total,
  331. CASE
  332. WHEN has_exception > 0 THEN
  333. 4
  334. WHEN step = 0 THEN
  335. 1
  336. WHEN step < total THEN
  337. 2
  338. WHEN step = total THEN
  339. 3
  340. END AS status
  341. FROM
  342. (
  343. SELECT
  344. pid,
  345. sxid,
  346. part,
  347. SUM( CASE WHEN status IN (3, 4) THEN 1 ELSE 0 END ) AS step,
  348. COUNT( 1 ) AS total,
  349. SUM( CASE WHEN status = 4 THEN 1 ELSE 0 END ) AS has_exception
  350. FROM
  351. ${dbTable}
  352. WHERE
  353. pid = '${lvalue}'
  354. GROUP BY
  355. part
  356. ORDER BY
  357. part
  358. ) AS sub`
  359. const sqlite = createSQLiteContext(dbName);
  360. return new Promise<UTSJSONObject>((resolve, reject) => {
  361. const selectSqlOptions = {
  362. sql: sql,
  363. success: (e : selectSqlOptionsResult) => {
  364. console.log(e)
  365. },
  366. fail: (e : selectSqlOptionsResult) => {
  367. console.error(e)
  368. }
  369. } as selectSqlOptions
  370. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  371. console.log(info)
  372. const ret = {
  373. errMsg: info?.errMsg ?? '',
  374. data: info?.data ?? ['']
  375. } as UTSJSONObject
  376. resolve(ret)
  377. });
  378. } else {
  379. return new Promise<UTSJSONObject>((resolve, reject) => {
  380. const ret = {
  381. errMsg: '错误查询',
  382. data: ['参数不存在']
  383. } as UTSJSONObject
  384. resolve(ret);
  385. })
  386. }
  387. }
  388. export function selectRecordInfo(query : string) : Promise<UTSJSONObject> {
  389. let querySQL = `where 1=1 `
  390. if (query != null && query != '') {
  391. querySQL += ` and ${query}`
  392. }
  393. var sql = `SELECT
  394. m.*,
  395. COUNT(r_stats.part) AS totalRecord,
  396. SUM(r_stats.is_status_3_4) AS statusRecordCount,
  397. SUM(r_stats.is_status_4) AS status4RecordCount,
  398. SUM(r_stats.is_upload) AS uploadCount
  399. FROM
  400. app_media_info m
  401. LEFT JOIN (
  402. SELECT
  403. r.pid,
  404. r.part,
  405. MAX(CASE WHEN r.status IN (3,4) THEN 1 ELSE 0 END) AS is_status_3_4,
  406. MAX(CASE WHEN r.status = 4 THEN 1 ELSE 0 END) AS is_status_4,
  407. MAX(CASE WHEN r.uploadFlag = 1 THEN 1 ELSE 0 END) AS is_upload
  408. FROM
  409. app_media_record r
  410. GROUP BY
  411. r.pid, r.part
  412. ) AS r_stats ON m.pdid = r_stats.pid
  413. ${querySQL}
  414. GROUP BY
  415. m.pdid
  416. ORDER BY
  417. m.pdid DESC`;
  418. const sqlite = createSQLiteContext(dbName);
  419. return new Promise<UTSJSONObject>((resolve, reject) => {
  420. const selectSqlOptions = {
  421. sql: sql,
  422. success: (e : selectSqlOptionsResult) => {
  423. console.log(e)
  424. },
  425. fail: (e : selectSqlOptionsResult) => {
  426. console.error(e)
  427. }
  428. } as selectSqlOptions
  429. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  430. console.log(info)
  431. const ret = {
  432. errMsg: info?.errMsg ?? '',
  433. data: info?.data ?? ['']
  434. } as UTSJSONObject
  435. resolve(ret)
  436. });
  437. }
  438. // 普通函数
  439. // 查询获取数据库里的最新的一条数据 sql:'SELECT * FROM dbTable WHERE lname = 'lvalue' ORDER BY pdid desc LIMIT 1'
  440. // 查询 SELECT * FROM 、 dbTable 是表名、 WHERE 查找条件 lname,lvalue 是查询条件的列名和列值
  441. // @param {Object} dbTable:表名
  442. // @param {Object} lname:列名
  443. // @param {Object} lvalue:列中的属性值
  444. export function selectLatestInfoData (
  445. productNo?: string,
  446. ):Promise<UTSJSONObject>
  447. {
  448. var sql = `SELECT
  449. m.*,
  450. COUNT(r_stats.photoitem) AS totalRecord,
  451. SUM(r_stats.is_status_3_4) AS statusRecordCount,
  452. SUM(r_stats.is_status_4) AS status4RecordCount
  453. FROM
  454. app_media_info m
  455. LEFT JOIN (
  456. SELECT
  457. r.pid,
  458. r.photoitem,
  459. MAX(CASE WHEN r.status IN (3,4) THEN 1 ELSE 0 END) AS is_status_3_4,
  460. MAX(CASE WHEN r.status = 4 THEN 1 ELSE 0 END) AS is_status_4
  461. FROM
  462. app_media_record r
  463. where productno = '${productNo}'
  464. GROUP BY
  465. r.pid, r.photoitem
  466. ) AS r_stats ON m.pdid = r_stats.pid
  467. where productno = '${productNo}'
  468. GROUP BY
  469. m.pdid
  470. ORDER BY
  471. m.pdid DESC
  472. LIMIT 1`;
  473. const sqlite = createSQLiteContext(dbName);
  474. return new Promise<UTSJSONObject>((resolve, reject) => {
  475. const selectSqlOptions ={
  476. sql: sql,
  477. success: (e: selectSqlOptionsResult) => {
  478. console.log(e)
  479. },
  480. fail: (e: selectSqlOptionsResult) => {
  481. console.error(e)
  482. }
  483. } as selectSqlOptions
  484. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  485. let data = info?.data;
  486. const ret = {
  487. errMsg: info?.errMsg ?? '',
  488. data: (info?.data != null && info.data.length > 0) ? info.data[0] : null
  489. } as UTSJSONObject
  490. resolve(ret)
  491. });
  492. }
  493. export function deleteTableData(
  494. dbTable: string,
  495. field : string,
  496. value : string
  497. ) : Promise<UTSJSONObject> {
  498. var sql = '';
  499. if (field !== null && dbTable !== null) {
  500. sql = `delete from ${dbTable} where ${field} = '${value}'`
  501. console.log(sql);
  502. const sqlite = createSQLiteContext(dbName);
  503. // WHERE 前面是要修改的列名、列值,后面是条件的列名、列值
  504. return new Promise((resolve, reject) => {
  505. const executeSqlOptions ={
  506. sql: sql,
  507. success: (e: executeSqlOptionsResult) => {
  508. console.log(e)
  509. },
  510. fail: (e: executeSqlOptionsResult) => {
  511. console.error(e)
  512. }
  513. } as executeSqlOptions
  514. const info = sqlite.executeSql(executeSqlOptions) as executeSqlOptionsResult
  515. console.log(info)
  516. const ret = {
  517. errMsg: info?.errMsg ?? '',
  518. data: info?.data ?? ['']
  519. } as UTSJSONObject
  520. sqlite.close();
  521. resolve(ret)
  522. })
  523. } else {
  524. return new Promise<UTSJSONObject>((resolve, reject) => {
  525. const ret = {
  526. errMsg: '错误查询',
  527. data: ['参数不存在']
  528. } as UTSJSONObject
  529. resolve(ret);
  530. })
  531. }
  532. }
  533. export function selectTaskInfo(query : string) : Promise<UTSJSONObject> {
  534. let querySQL = `where 1=1 `
  535. if(query != null && query != '') {
  536. querySQL += ` and ${query} `
  537. }
  538. var sql = `SELECT
  539. m.*,
  540. CASE WHEN COALESCE(p.photoTotal, 0) > 0 THEN 1 ELSE 0 END as photoTotal,
  541. CASE WHEN COALESCE(k.keyTotal,0) > 0 THEN 1 ELSE 0 END as keyTotal,
  542. CASE WHEN COALESCE(i.recordTotal,0) > 0 THEN 1 ELSE 0 END as recordTotal,
  543. CASE WHEN p.photoCount = p.photoTotal THEN 1 ELSE 0 END as photoStatus,
  544. CASE WHEN k.keyCount = k.keyTotal THEN 1 ELSE 0 END as keyStatus,
  545. CASE WHEN i.recordCount = i.recordTotal THEN 1 ELSE 0 END as recordStatus
  546. FROM
  547. app_task_info m
  548. LEFT JOIN (
  549. SELECT
  550. pdid,
  551. COUNT(pdid) as photoTotal,
  552. SUM(CASE WHEN photourl IS NOT NULL and photourl != '' THEN 1 ELSE 0 END) as photoCount
  553. FROM app_task_photo
  554. GROUP BY pdid
  555. ) p ON m.pdid = p.pdid
  556. LEFT JOIN (
  557. SELECT
  558. pdid,
  559. COUNT(pdid) as keyTotal,
  560. SUM(CASE WHEN result in ('合格', '不合格') THEN 1 ELSE 0 END) as keyCount
  561. FROM app_task_keyprocess
  562. GROUP BY pdid
  563. ) k ON m.pdid = k.pdid
  564. LEFT JOIN (
  565. SELECT
  566. r.pdid,
  567. COUNT(i.sxid) as recordTotal,
  568. SUM(CASE WHEN i.result in ( '合格', '不合格' ) THEN 1 ELSE 0 END) as recordCount,
  569. case when i.result = '不合格' then '1' else 0 end as recordStatus
  570. FROM app_task_record r
  571. LEFT JOIN app_task_record_item i ON r.sxid = i.psxid
  572. GROUP BY r.pdid
  573. ) i ON m.pdid = i.pdid
  574. ${querySQL}
  575. ORDER BY
  576. m.pdid DESC`;
  577. const sqlite = createSQLiteContext(dbName);
  578. return new Promise<UTSJSONObject>((resolve, reject) => {
  579. const selectSqlOptions = {
  580. sql: sql,
  581. success: (e : selectSqlOptionsResult) => {
  582. console.log(e)
  583. },
  584. fail: (e : selectSqlOptionsResult) => {
  585. console.error(e)
  586. }
  587. } as selectSqlOptions
  588. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  589. console.log(info)
  590. const ret = {
  591. errMsg: info?.errMsg ?? '',
  592. data: info?.data ?? ['']
  593. } as UTSJSONObject
  594. resolve(ret)
  595. });
  596. }
  597. export function selectTaskId(table : string, field : string, paramField : string, value : string) : Promise<string> {
  598. var sql = `SELECT
  599. m.${field} as id
  600. FROM
  601. ${table} m
  602. where ${paramField} = '${value}'
  603. `;
  604. console.log(sql);
  605. const sqlite = createSQLiteContext(dbName);
  606. return new Promise<string>((resolve, reject) => {
  607. const selectSqlOptions = {
  608. sql: sql,
  609. success: (e : selectSqlOptionsResult) => {
  610. console.log(e)
  611. },
  612. fail: (e : selectSqlOptionsResult) => {
  613. console.error(e)
  614. }
  615. } as selectSqlOptions
  616. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  617. let resultArr = info?.['data'] as UTSJSONObject[] ?? Array<UTSJSONObject>();
  618. let returnValue = '';
  619. if (resultArr!=null && resultArr.length > 0) {
  620. const firstRecord = resultArr[0];
  621. if (firstRecord != null) {
  622. returnValue = firstRecord?.['id'] as string;
  623. }
  624. }
  625. resolve(returnValue)
  626. });
  627. }
  628. export function selectLatestTaskData (
  629. gxpk?: string,
  630. ):Promise<UTSJSONObject>
  631. {
  632. var sql = `SELECT
  633. m.*,
  634. photoCount as photoCount,
  635. keyCount as keyCount,
  636. recordCount as recordCount
  637. FROM
  638. app_task_info m
  639. LEFT JOIN (
  640. SELECT
  641. pdid,
  642. SUM(CASE WHEN photourl IS NOT NULL and photourl != '' THEN 1 ELSE 0 END) as photoCount
  643. FROM app_task_photo
  644. GROUP BY pdid
  645. ) p ON m.pdid = p.pdid
  646. LEFT JOIN (
  647. SELECT
  648. pdid,
  649. SUM(CASE WHEN result in ('合格', '不合格') THEN 1 ELSE 0 END) as keyCount
  650. FROM app_task_keyprocess
  651. GROUP BY pdid
  652. ) k ON m.pdid = k.pdid
  653. LEFT JOIN (
  654. SELECT
  655. r.pdid,
  656. SUM(CASE WHEN i.result in ( '合格', '不合格' ) THEN 1 ELSE 0 END) as recordCount
  657. FROM app_task_record r
  658. LEFT JOIN app_task_record_item i ON r.sxid = i.psxid
  659. GROUP BY r.pdid
  660. ) i ON m.pdid = i.pdid
  661. where m.gxpk = '${gxpk}'
  662. ORDER BY
  663. m.pdid DESC
  664. LIMIT 1`;
  665. const sqlite = createSQLiteContext(dbName);
  666. console.log(sql)
  667. return new Promise<UTSJSONObject>((resolve, reject) => {
  668. const selectSqlOptions ={
  669. sql: sql,
  670. success: (e: selectSqlOptionsResult) => {
  671. console.log(e)
  672. },
  673. fail: (e: selectSqlOptionsResult) => {
  674. console.error(e)
  675. }
  676. } as selectSqlOptions
  677. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  678. const ret = {
  679. errMsg: info?.errMsg ?? '',
  680. data: (info?.data != null && info.data.length > 0) ? info.data[0] : null
  681. } as UTSJSONObject
  682. resolve(ret)
  683. });
  684. }
  685. //统计查询任务的详细信息
  686. export function selectTaskDetail (
  687. field?:string,
  688. value?: string,
  689. ):Promise<UTSJSONObject>
  690. {
  691. var sql = `SELECT
  692. m.pdid,
  693. m.gxno,
  694. COALESCE(p.photoTotal, 0 ) as photoTotal,
  695. COALESCE(p.photoCount, 0 ) as photoCount,
  696. CASE WHEN COALESCE(p.photoTotal, 0 ) = COALESCE(p.photoCount, 0 ) THEN '已完成' ELSE '' END as photoStatus,
  697. COALESCE(k.keyTotal, 0 ) as keyTotal,
  698. COALESCE(k.keyCount, 0 ) as keyCount,
  699. CASE
  700. WHEN k.errorCount > 0 then '不合格'
  701. WHEN COALESCE(k.keyTotal, 0 ) = COALESCE(k.keyCount, 0 ) THEN '已完成' ELSE '' END as keyStatus,
  702. COALESCE(i.recordTotal, 0) as recordTotal,
  703. COALESCE(i.recordCount, 0) as recordCount,
  704. CASE
  705. WHEN i.errorCount > 0 then '不合格'
  706. WHEN COALESCE(i.recordTotal, 0) = COALESCE(i.recordCount, 0) THEN '已完成' ELSE '' END as recordStatus
  707. FROM
  708. app_task_info m
  709. LEFT JOIN (
  710. SELECT
  711. pdid,
  712. COUNT(pdid) as photoTotal,
  713. SUM(CASE WHEN photourl IS NOT NULL and photourl != '' THEN 1 ELSE 0 END) as photoCount
  714. FROM app_task_photo
  715. GROUP BY pdid
  716. ) p ON m.pdid = p.pdid
  717. LEFT JOIN (
  718. SELECT
  719. pdid,
  720. COUNT(pdid) as keyTotal,
  721. SUM(CASE WHEN result in ('合格', '不合格') THEN 1 ELSE 0 END) as keyCount,
  722. SUM(case when result = '不合格' then 1 else 0 end) as errorCount
  723. FROM app_task_keyprocess
  724. GROUP BY pdid
  725. ) k ON m.pdid = k.pdid
  726. LEFT JOIN (
  727. SELECT
  728. r.pdid,
  729. COUNT(i.sxid) as recordTotal,
  730. SUM(CASE WHEN i.result in ('合格', '不合格') THEN 1 ELSE 0 END) as recordCount,
  731. SUM(case when i.result = '不合格' then 1 else 0 end) as errorCount
  732. FROM app_task_record r
  733. LEFT JOIN app_task_record_item i ON r.sxid = i.psxid
  734. GROUP BY r.pdid
  735. ) i ON m.pdid = i.pdid
  736. where m.${field} = '${value}'
  737. `;
  738. const sqlite = createSQLiteContext(dbName);
  739. return new Promise<UTSJSONObject>((resolve, reject) => {
  740. const selectSqlOptions ={
  741. sql: sql,
  742. success: (e: selectSqlOptionsResult) => {
  743. console.log(e)
  744. },
  745. fail: (e: selectSqlOptionsResult) => {
  746. console.error(e)
  747. }
  748. } as selectSqlOptions
  749. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  750. const ret = {
  751. errMsg: info?.errMsg ?? '',
  752. data: info?.data ?? ['']
  753. } as UTSJSONObject
  754. resolve(ret)
  755. });
  756. }
  757. // 检查表是否存在
  758. export const checkTableExists = (tableName: string): Promise<UTSJSONObject> => {
  759. return new Promise((resolve) => {
  760. try {
  761. // 注意:这个方法不使用forceRecreate选项,避免在检查过程中删除表
  762. console.log(`检查数据库表是否存在: ${tableName}`);
  763. const db = createSQLiteContext(dbName);
  764. const sql = `SELECT name FROM sqlite_master WHERE type='table' AND name='${tableName}'`;
  765. db.selectSql({
  766. sql: sql,
  767. success: (e: UTSJSONObject) => {
  768. const data = e.data !== undefined && e.data !== null ? e.data : [];
  769. const exists = Array.isArray(data) && data.length > 0;
  770. console.log(`表 ${tableName} 存在: ${exists}`);
  771. resolve({
  772. errMsg: '',
  773. exists: exists
  774. });
  775. },
  776. fail: (e: UTSJSONObject) => {
  777. const errMsg = e.errMsg !== undefined && typeof e.errMsg === 'string' ? e.errMsg : '查询失败';
  778. console.error(`检查表 ${tableName} 存在性时失败:`, errMsg);
  779. resolve({
  780. errMsg: errMsg,
  781. exists: false
  782. });
  783. }
  784. });
  785. } catch (error) {
  786. console.error('检查表是否存在时发生异常:', error);
  787. resolve({
  788. errMsg: '数据库操作异常',
  789. exists: false
  790. });
  791. }
  792. });
  793. };
  794. // 初始化数据库表
  795. export const initializeDatabase = async (): Promise<UTSJSONObject> => {
  796. try {
  797. console.log('开始初始化数据库...');
  798. // 注意:根据接口定义,createSQLiteContext函数只接受一个参数
  799. const db = createSQLiteContext(dbName);
  800. // 检查表是否存在
  801. const tableExists = await checkTableExists('app_user');
  802. if (tableExists.exists) {
  803. console.log('数据库初始化成功,app_user表已创建');
  804. return {
  805. errMsg: '',
  806. success: true,
  807. message: '数据库初始化成功'
  808. };
  809. } else {
  810. console.error('数据库初始化失败,app_user表未创建');
  811. return {
  812. errMsg: '数据库表创建失败',
  813. success: false,
  814. message: '数据库表创建失败'
  815. };
  816. }
  817. } catch (error) {
  818. console.error('数据库初始化异常:', error);
  819. return {
  820. errMsg: '数据库初始化异常',
  821. success: false,
  822. message: '数据库初始化异常'
  823. };
  824. }
  825. };
  826. export function selectTableDataByOrder (
  827. dbTable: string,
  828. lname?: string,
  829. lvalue?: string,
  830. cc?: string,
  831. dd?: string,
  832. order?: string,
  833. ):Promise<UTSJSONObject>
  834. {
  835. if (dbTable !== null) {
  836. // 第一个是表单名称,后两个参数是列表名,用来检索
  837. var sql = '';
  838. if (lname !== null && cc !== null) {
  839. // 两个检索条件
  840. sql = `SELECT * FROM ${dbTable} WHERE ${lname} = '${lvalue}' AND ${cc} = '${dd}'`
  841. }
  842. if (lname !== null && cc == null) {
  843. // 一个检索条件
  844. sql = `SELECT * FROM ${dbTable} WHERE ${lname} = '${lvalue}'`
  845. // console.log(sql);
  846. }
  847. if (lname == null) {
  848. sql = `SELECT * FROM ${dbTable}`
  849. }
  850. if (order != null) {
  851. sql += order
  852. }
  853. console.log(sql)
  854. const sqlite = createSQLiteContext(dbName);
  855. return new Promise<UTSJSONObject>((resolve, reject) => {
  856. const selectSqlOptions ={
  857. sql: sql,
  858. success: (e: selectSqlOptionsResult) => {
  859. console.log(e)
  860. },
  861. fail: (e: selectSqlOptionsResult) => {
  862. console.error(e)
  863. }
  864. } as selectSqlOptions
  865. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  866. console.log(info)
  867. const ret = {
  868. errMsg: info?.errMsg ?? '',
  869. data: info?.data ?? ['']
  870. } as UTSJSONObject
  871. resolve(ret)
  872. });
  873. } else {
  874. return new Promise<UTSJSONObject>((resolve, reject) => {
  875. const ret = {
  876. errMsg: '错误查询',
  877. data : ['表名不存在']
  878. } as UTSJSONObject
  879. resolve(ret);
  880. })
  881. }
  882. }