sqlite.uts 25 KB

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