sqlite.uts 29 KB

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