sqlite.uts 26 KB

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