sqlite.uts 25 KB

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