sqlite.uts 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868
  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 15 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. resolve(ret)
  306. })
  307. }
  308. // 获取统计值
  309. // @param {Object} lvalue:关联主表id
  310. export function selectRecordData(
  311. dbTable: string,
  312. lvalue ?: string
  313. ) : Promise<UTSJSONObject> {
  314. var sql = '';
  315. if (lvalue !== null && dbTable !== null) {
  316. sql = `SELECT
  317. pid,
  318. photoitem,
  319. step,
  320. total,
  321. CASE
  322. WHEN has_exception > 0 THEN
  323. 4
  324. WHEN step = 0 THEN
  325. 1
  326. WHEN step < total THEN
  327. 2
  328. WHEN step = total THEN
  329. 3
  330. END AS status
  331. FROM
  332. (
  333. SELECT
  334. pid,
  335. sxid,
  336. photoitem,
  337. SUM( CASE WHEN status IN (3, 4) THEN 1 ELSE 0 END ) AS step,
  338. COUNT( 1 ) AS total,
  339. SUM( CASE WHEN status = 4 THEN 1 ELSE 0 END ) AS has_exception
  340. FROM
  341. ${dbTable}
  342. WHERE
  343. pid = '${lvalue}'
  344. GROUP BY
  345. photoitem
  346. ORDER BY
  347. CAST ( sxid AS INTEGER )
  348. ) AS sub`
  349. const sqlite = createSQLiteContext(dbName);
  350. return new Promise<UTSJSONObject>((resolve, reject) => {
  351. const selectSqlOptions = {
  352. sql: sql,
  353. success: (e : selectSqlOptionsResult) => {
  354. console.log(e)
  355. },
  356. fail: (e : selectSqlOptionsResult) => {
  357. console.error(e)
  358. }
  359. } as selectSqlOptions
  360. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  361. console.log(info)
  362. const ret = {
  363. errMsg: info?.errMsg ?? '',
  364. data: info?.data ?? ['']
  365. } as UTSJSONObject
  366. resolve(ret)
  367. });
  368. } else {
  369. return new Promise<UTSJSONObject>((resolve, reject) => {
  370. const ret = {
  371. errMsg: '错误查询',
  372. data: ['参数不存在']
  373. } as UTSJSONObject
  374. resolve(ret);
  375. })
  376. }
  377. }
  378. export function selectRecordInfo() : Promise<UTSJSONObject> {
  379. var sql = `SELECT
  380. m.*,
  381. COUNT(r_stats.photoitem) AS totalRecord,
  382. SUM(r_stats.is_status_3_4) AS statusRecordCount,
  383. SUM(r_stats.is_status_4) AS status4RecordCount
  384. FROM
  385. app_media_info m
  386. LEFT JOIN (
  387. SELECT
  388. r.pid,
  389. r.photoitem,
  390. MAX(CASE WHEN r.status IN (3,4) THEN 1 ELSE 0 END) AS is_status_3_4,
  391. MAX(CASE WHEN r.status = 4 THEN 1 ELSE 0 END) AS is_status_4
  392. FROM
  393. app_media_record r
  394. GROUP BY
  395. r.pid, r.photoitem
  396. ) AS r_stats ON m.pdid = r_stats.pid
  397. GROUP BY
  398. m.pdid
  399. ORDER BY
  400. m.pdid DESC`;
  401. const sqlite = createSQLiteContext(dbName);
  402. return new Promise<UTSJSONObject>((resolve, reject) => {
  403. const selectSqlOptions = {
  404. sql: sql,
  405. success: (e : selectSqlOptionsResult) => {
  406. console.log(e)
  407. },
  408. fail: (e : selectSqlOptionsResult) => {
  409. console.error(e)
  410. }
  411. } as selectSqlOptions
  412. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  413. console.log(info)
  414. const ret = {
  415. errMsg: info?.errMsg ?? '',
  416. data: info?.data ?? ['']
  417. } as UTSJSONObject
  418. resolve(ret)
  419. });
  420. }
  421. // 普通函数
  422. // 查询获取数据库里的最新的一条数据 sql:'SELECT * FROM dbTable WHERE lname = 'lvalue' ORDER BY pdid desc LIMIT 1'
  423. // 查询 SELECT * FROM 、 dbTable 是表名、 WHERE 查找条件 lname,lvalue 是查询条件的列名和列值
  424. // @param {Object} dbTable:表名
  425. // @param {Object} lname:列名
  426. // @param {Object} lvalue:列中的属性值
  427. export function selectLatestInfoData (
  428. productNo?: string,
  429. ):Promise<UTSJSONObject>
  430. {
  431. var sql = `SELECT
  432. m.*,
  433. COUNT(r_stats.photoitem) AS totalRecord,
  434. SUM(r_stats.is_status_3_4) AS statusRecordCount,
  435. SUM(r_stats.is_status_4) AS status4RecordCount
  436. FROM
  437. app_media_info m
  438. LEFT JOIN (
  439. SELECT
  440. r.pid,
  441. r.photoitem,
  442. MAX(CASE WHEN r.status IN (3,4) THEN 1 ELSE 0 END) AS is_status_3_4,
  443. MAX(CASE WHEN r.status = 4 THEN 1 ELSE 0 END) AS is_status_4
  444. FROM
  445. app_media_record r
  446. where productno = '${productNo}'
  447. GROUP BY
  448. r.pid, r.photoitem
  449. ) AS r_stats ON m.pdid = r_stats.pid
  450. where productno = '${productNo}'
  451. GROUP BY
  452. m.pdid
  453. ORDER BY
  454. m.pdid DESC
  455. LIMIT 1`;
  456. const sqlite = createSQLiteContext(dbName);
  457. return new Promise<UTSJSONObject>((resolve, reject) => {
  458. const selectSqlOptions ={
  459. sql: sql,
  460. success: (e: selectSqlOptionsResult) => {
  461. console.log(e)
  462. },
  463. fail: (e: selectSqlOptionsResult) => {
  464. console.error(e)
  465. }
  466. } as selectSqlOptions
  467. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  468. let data = info?.data;
  469. const ret = {
  470. errMsg: info?.errMsg ?? '',
  471. data: (info?.data != null && info.data.length > 0) ? info.data[0] : null
  472. } as UTSJSONObject
  473. resolve(ret)
  474. });
  475. }
  476. export function deleteTableData(
  477. dbTable: string,
  478. field : string,
  479. value : string
  480. ) : Promise<UTSJSONObject> {
  481. var sql = '';
  482. if (field !== null && dbTable !== null) {
  483. sql = `delete from ${dbTable} where ${field} = '${value}'`
  484. console.log(sql);
  485. const sqlite = createSQLiteContext(dbName);
  486. // WHERE 前面是要修改的列名、列值,后面是条件的列名、列值
  487. return new Promise((resolve, reject) => {
  488. const executeSqlOptions ={
  489. sql: sql,
  490. success: (e: executeSqlOptionsResult) => {
  491. console.log(e)
  492. },
  493. fail: (e: executeSqlOptionsResult) => {
  494. console.error(e)
  495. }
  496. } as executeSqlOptions
  497. const info = sqlite.executeSql(executeSqlOptions) as executeSqlOptionsResult
  498. console.log(info)
  499. const ret = {
  500. errMsg: info?.errMsg ?? '',
  501. data: info?.data ?? ['']
  502. } as UTSJSONObject
  503. sqlite.close();
  504. resolve(ret)
  505. })
  506. } else {
  507. return new Promise<UTSJSONObject>((resolve, reject) => {
  508. const ret = {
  509. errMsg: '错误查询',
  510. data: ['参数不存在']
  511. } as UTSJSONObject
  512. resolve(ret);
  513. })
  514. }
  515. }
  516. export function selectTaskInfo() : Promise<UTSJSONObject> {
  517. var sql = `SELECT
  518. m.*,
  519. CASE WHEN p.photoCount = p.photoTotal THEN 1 ELSE 0 END as photoStatus,
  520. CASE WHEN k.keyCount = k.keyTotal THEN 1 ELSE 0 END as keyStatus,
  521. CASE WHEN i.recordCount = i.recordTotal THEN 1 ELSE 0 END as recordStatus
  522. FROM
  523. app_task_info m
  524. LEFT JOIN (
  525. SELECT
  526. pdid,
  527. COUNT(pdid) as photoTotal,
  528. SUM(CASE WHEN photourl IS NOT NULL and photourl != '' THEN 1 ELSE 0 END) as photoCount
  529. FROM app_task_photo
  530. GROUP BY pdid
  531. ) p ON m.pdid = p.pdid
  532. LEFT JOIN (
  533. SELECT
  534. pdid,
  535. COUNT(pdid) as keyTotal,
  536. SUM(CASE WHEN result in ('合格', '不合格') THEN 1 ELSE 0 END) as keyCount
  537. FROM app_task_keyprocess
  538. GROUP BY pdid
  539. ) k ON m.pdid = k.pdid
  540. LEFT JOIN (
  541. SELECT
  542. r.pdid,
  543. COUNT(i.sxid) as recordTotal,
  544. SUM(CASE WHEN i.result in ( '合格', '不合格' ) THEN 1 ELSE 0 END) as recordCount,
  545. case when i.result = '不合格' then '1' else 0 end as recordStatus
  546. FROM app_task_record r
  547. LEFT JOIN app_task_record_item i ON r.sxid = i.psxid
  548. GROUP BY r.pdid
  549. ) i ON m.pdid = i.pdid
  550. ORDER BY
  551. m.pdid DESC`;
  552. const sqlite = createSQLiteContext(dbName);
  553. return new Promise<UTSJSONObject>((resolve, reject) => {
  554. const selectSqlOptions = {
  555. sql: sql,
  556. success: (e : selectSqlOptionsResult) => {
  557. console.log(e)
  558. },
  559. fail: (e : selectSqlOptionsResult) => {
  560. console.error(e)
  561. }
  562. } as selectSqlOptions
  563. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  564. console.log(info)
  565. const ret = {
  566. errMsg: info?.errMsg ?? '',
  567. data: info?.data ?? ['']
  568. } as UTSJSONObject
  569. resolve(ret)
  570. });
  571. }
  572. export function selectTaskId(table : string, field : string, paramField : string, value : string) : Promise<string> {
  573. var sql = `SELECT
  574. m.${field} as id
  575. FROM
  576. ${table} m
  577. where ${paramField} = '${value}'
  578. `;
  579. console.log(sql);
  580. const sqlite = createSQLiteContext(dbName);
  581. return new Promise<string>((resolve, reject) => {
  582. const selectSqlOptions = {
  583. sql: sql,
  584. success: (e : selectSqlOptionsResult) => {
  585. console.log(e)
  586. },
  587. fail: (e : selectSqlOptionsResult) => {
  588. console.error(e)
  589. }
  590. } as selectSqlOptions
  591. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  592. let resultArr = info?.['data'] as UTSJSONObject[] ?? Array<UTSJSONObject>();
  593. let returnValue = '';
  594. if (resultArr!=null && resultArr.length > 0) {
  595. const firstRecord = resultArr[0];
  596. if (firstRecord != null) {
  597. returnValue = firstRecord?.['id'] as string;
  598. }
  599. }
  600. resolve(returnValue)
  601. });
  602. }
  603. export function selectLatestTaskData (
  604. productNo?: string,
  605. ):Promise<UTSJSONObject>
  606. {
  607. var sql = `SELECT
  608. m.*
  609. FROM
  610. app_task_info m
  611. where gxpk = '${productNo}'
  612. ORDER BY
  613. m.pdid DESC
  614. LIMIT 1`;
  615. const sqlite = createSQLiteContext(dbName);
  616. return new Promise<UTSJSONObject>((resolve, reject) => {
  617. const selectSqlOptions ={
  618. sql: sql,
  619. success: (e: selectSqlOptionsResult) => {
  620. console.log(e)
  621. },
  622. fail: (e: selectSqlOptionsResult) => {
  623. console.error(e)
  624. }
  625. } as selectSqlOptions
  626. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  627. const ret = {
  628. errMsg: info?.errMsg ?? '',
  629. data: (info?.data != null && info.data.length > 0) ? info.data[0] : null
  630. } as UTSJSONObject
  631. resolve(ret)
  632. });
  633. }
  634. //统计查询任务的详细信息
  635. export function selectTaskDetail (
  636. field?:string,
  637. value?: string,
  638. ):Promise<UTSJSONObject>
  639. {
  640. var sql = `SELECT
  641. m.pdid,
  642. m.gxno,
  643. p.photoTotal,
  644. p.photoCount,
  645. CASE WHEN p.photoCount = p.photoTotal THEN '已完成' ELSE '' END as photoStatus,
  646. k.keyTotal,
  647. k.keyCount,
  648. CASE
  649. WHEN k.errorCount > 0 then '不合格'
  650. WHEN k.keyCount = k.keyTotal THEN '已完成' ELSE '' END as keyStatus,
  651. i.recordTotal,
  652. i.recordCount,
  653. CASE
  654. WHEN i.errorCount > 0 then '不合格'
  655. WHEN i.recordCount = i.recordTotal THEN '已完成' ELSE '' END as recordStatus
  656. FROM
  657. app_task_info m
  658. LEFT JOIN (
  659. SELECT
  660. pdid,
  661. COUNT(pdid) as photoTotal,
  662. SUM(CASE WHEN photourl IS NOT NULL and photourl != '' THEN 1 ELSE 0 END) as photoCount
  663. FROM app_task_photo
  664. GROUP BY pdid
  665. ) p ON m.pdid = p.pdid
  666. LEFT JOIN (
  667. SELECT
  668. pdid,
  669. COUNT(pdid) as keyTotal,
  670. SUM(CASE WHEN result in ('合格', '不合格') THEN 1 ELSE 0 END) as keyCount,
  671. SUM(case when result = '不合格' then 1 else 0 end) as errorCount
  672. FROM app_task_keyprocess
  673. GROUP BY pdid
  674. ) k ON m.pdid = k.pdid
  675. LEFT JOIN (
  676. SELECT
  677. r.pdid,
  678. COUNT(i.sxid) as recordTotal,
  679. SUM(CASE WHEN i.result in ('合格', '不合格') THEN 1 ELSE 0 END) as recordCount,
  680. SUM(case when i.result = '不合格' then 1 else 0 end) as errorCount
  681. FROM app_task_record r
  682. LEFT JOIN app_task_record_item i ON r.sxid = i.psxid
  683. GROUP BY r.pdid
  684. ) i ON m.pdid = i.pdid
  685. where m.${field} = '${value}'
  686. `;
  687. const sqlite = createSQLiteContext(dbName);
  688. return new Promise<UTSJSONObject>((resolve, reject) => {
  689. const selectSqlOptions ={
  690. sql: sql,
  691. success: (e: selectSqlOptionsResult) => {
  692. console.log(e)
  693. },
  694. fail: (e: selectSqlOptionsResult) => {
  695. console.error(e)
  696. }
  697. } as selectSqlOptions
  698. const info = sqlite.selectSql(selectSqlOptions) as selectSqlOptionsResult
  699. const ret = {
  700. errMsg: info?.errMsg ?? '',
  701. data: info?.data ?? ['']
  702. } as UTSJSONObject
  703. resolve(ret)
  704. });
  705. }
  706. export function selectTableDataByOrder (
  707. dbTable: string,
  708. lname?: string,
  709. lvalue?: string,
  710. cc?: string,
  711. dd?: string,
  712. order?: string,
  713. ):Promise<UTSJSONObject>
  714. {
  715. if (dbTable !== null) {
  716. // 第一个是表单名称,后两个参数是列表名,用来检索
  717. var sql = '';
  718. if (lname !== null && cc !== null) {
  719. // 两个检索条件
  720. sql = `SELECT * FROM ${dbTable} WHERE ${lname} = '${lvalue}' AND ${cc} = '${dd}'`
  721. }
  722. if (lname !== null && cc == null) {
  723. // 一个检索条件
  724. sql = `SELECT * FROM ${dbTable} WHERE ${lname} = '${lvalue}'`
  725. // console.log(sql);
  726. }
  727. if (lname == null) {
  728. sql = `SELECT * FROM ${dbTable}`
  729. }
  730. if (order != null) {
  731. sql += order
  732. }
  733. console.log(sql)
  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. console.log(info)
  747. const ret = {
  748. errMsg: info?.errMsg ?? '',
  749. data: info?.data ?? ['']
  750. } as UTSJSONObject
  751. resolve(ret)
  752. });
  753. } else {
  754. return new Promise<UTSJSONObject>((resolve, reject) => {
  755. const ret = {
  756. errMsg: '错误查询',
  757. data : ['表名不存在']
  758. } as UTSJSONObject
  759. resolve(ret);
  760. })
  761. }
  762. }