d_user.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539
  1. const mysql = require('./mysql');
  2. const fields = require("../maps/field")
  3. const code = require("../maps/rcodeMap");
  4. /**
  5. * 查找是否有指定用户名的账户
  6. * @param userType 用户类型
  7. * @param account 账号
  8. * @returns {Promise<unknown>}
  9. */
  10. function findAccountUser(userType,account){
  11. let sql = `select * from user where accountType = ? and account = ?`;
  12. let values = [userType,account];
  13. return mysql.pq(sql,values);
  14. }
  15. /**
  16. * 查找是否手机号是否被绑定
  17. * @param userType 用户类型
  18. * @param phone 手机号
  19. * @returns {Promise<unknown>}
  20. */
  21. function findPhoneUser(userType,phone){
  22. let sql = `select count(*) as total from user where accountType = ? and phone = ?`;
  23. let values = [userType,phone];
  24. return mysql.pq(sql,values);
  25. }
  26. /**
  27. * 登录
  28. * @param userType
  29. * @param account
  30. * @param passwd
  31. * @returns {Promise<unknown>}
  32. */
  33. function login(userType,account,passwd){
  34. let sql = `select * from user where accountType = ? and account = ? and passwd = ?`;
  35. let values = [...arguments];
  36. return mysql.pq(sql,values);
  37. }
  38. /**
  39. * 根据id修改密码
  40. * @param id
  41. * @param newPasswd
  42. * @returns {Promise<unknown>}
  43. */
  44. function changePasswd(id,newPasswd){
  45. let sql = `update user set passwd = ? where id = ?`;
  46. let values = [newPasswd,id];
  47. return mysql.pq(sql,values);
  48. }
  49. /**
  50. * 修改账号手机号
  51. * @param id
  52. * @param phone
  53. * @returns {Promise<unknown>}
  54. */
  55. function changePhone(id,phone){
  56. let sql = `update user set Phone = ? where id = ?`;
  57. let values = [phone,id];
  58. return mysql.pq(sql,values);
  59. }
  60. /**
  61. * 新增用户
  62. * @param userType 账户类型
  63. * @param nickName 用户名称
  64. * @param account 登录账号
  65. * @param passwd 密码
  66. * @returns {Promise<unknown>}
  67. */
  68. function register(userType,nickName,account,passwd){
  69. let sql = `insert into user(nickName,account,passwd,accountType) values(?,?,?,?)`;
  70. let values = [nickName,account,passwd,userType];
  71. return mysql.pq(sql,values);
  72. }
  73. function info(type,account){
  74. let sql = `select * from user where accountType = ? and account = ?`;
  75. let values = [type,account];
  76. return mysql.pq(sql,values);
  77. }
  78. function findCar(userId,flightId){
  79. let sql = ``,values = [];
  80. sql = `select c.*,f.flightState,f.currentPrice,f.sailingTime,f.langdinTime,dep.cityname as departureCityName,tar.cityname as targetCityName
  81. from
  82. flight as f
  83. inner JOIN (select * from car ) as c on c.flightId = f.id
  84. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  85. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity
  86. where c.userId = ? and flightId = ?;`
  87. values.push(userId,flightId);
  88. return mysql.pq(sql,values);
  89. }
  90. function cars(userId){
  91. let sql = ``,values = [];
  92. sql = `select c.*,f.flightState,f.currentPrice,f.sailingTime,f.langdinTime,dep.cityname as departureCityName,tar.cityname as targetCityName
  93. from
  94. flight as f
  95. inner JOIN (select * from car ) as c on c.flightId = f.id
  96. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  97. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity
  98. where c.userId = ?;`
  99. values.push(userId);
  100. return mysql.pq(sql,values);
  101. }
  102. function addCar(flightId,userId){
  103. let sql = `insert into car(flightId,userId) values(?,?)`;
  104. let values = [flightId,userId];
  105. return mysql.pq(sql,values);
  106. }
  107. /**
  108. * 添加乘机人
  109. * @param userId
  110. * @param name
  111. * @param card
  112. * @param phone
  113. * @param defaultState
  114. * @returns {Promise | Promise<unknown>}
  115. */
  116. function addTravel(userId,name,card,phone,defaultState){
  117. let sql = `insert into travel(userId,name,card,phone,\`default\`) values(?,?,?,?,?)`;
  118. let values = [userId,name,card,phone,defaultState];
  119. return mysql.pq(sql,values);
  120. }
  121. // 获取乘机人
  122. function travels(userId){
  123. let sql = `select * from travel where userId = ? and \`delete\` = ?`;
  124. let values = [userId,fields.travelDelete_notDelete];
  125. return mysql.pq(sql,values);
  126. }
  127. // 获取乘机人
  128. function findUserTravel(userId,flightId){
  129. let sql = `select * from travel where userId = ? and id = ?`;
  130. let values = [userId,flightId];
  131. return mysql.pq(sql,values);
  132. }
  133. /**
  134. * 修改指定用户的所有状态
  135. * @param userId
  136. * @param travelState
  137. * @returns {Promise | Promise<unknown>}
  138. */
  139. function changeAllTravelState(userId,travelState = fields.travelState_notDefault){
  140. let sql = `update travel set \`default\` = ? where userId = ?`;
  141. let values = [travelState,userId];
  142. return mysql.pq(sql,values);
  143. }
  144. /**
  145. * 修改指定乘机人的信息
  146. * @param travelId
  147. * @param params
  148. * @returns {Promise | Promise<unknown>}
  149. */
  150. function changeTravel(travelId,params){
  151. let sql=`update travel set`,values=[];
  152. let fields = Object.keys(params);
  153. fields = fields.filter(field=>params[field])
  154. if(fields.length<1){
  155. throw {rcode:code.notParam}
  156. }
  157. for(let field of fields) {
  158. // console.log(`${field} : ${searchItems[field]}`)
  159. if (!params[field]) {
  160. continue;
  161. }
  162. if(values.length>0){sql+=','}
  163. sql+=` \`${field}\` = ?`
  164. values.push(params[field])
  165. }
  166. sql+=` where id=?`;
  167. values.push(travelId)
  168. // let sql = `update travel set default = ? where userId = ?`;
  169. // let values = [travelState,userId];
  170. return mysql.pq(sql,values);
  171. }
  172. // 修改乘机人
  173. function removeTravel(travelId){
  174. let sql = `update travel set travel.delete = ? where travelId =?`;
  175. let values = [fields.travelDelete_notDelete,travelId];
  176. return mysql.pq(sql,values);
  177. }
  178. // 修改乘机人
  179. function travelInfo(travelId){
  180. let sql = `select * from travel where id = ?`;
  181. let values = [travelId];
  182. return mysql.pq(sql,values);
  183. }
  184. /**
  185. * 移除购物车的指定行 根据id
  186. * @param carId 要删除的id
  187. * @returns {Promise<unknown>}
  188. */
  189. function removeCar(carId){
  190. let sql = `delete from car where id = ?`;
  191. let values = [carId];
  192. return mysql.pq(sql,values);
  193. }
  194. /**
  195. * 用户的所有订单
  196. * @param userId
  197. * @param orderType
  198. * @returns {Promise | Promise<unknown>}
  199. */
  200. function userOrder(userId,orderType = fields.orderType_all){
  201. let sql=``,values=[];
  202. sql+=`
  203. select
  204. o.*,air.airCode,
  205. f.sailingTime,f.langdinTime,f.flightState,f.flightName,
  206. f.currentPrice,
  207. dep.cityname as departureCityName,
  208. tar.cityname as targetCityName
  209. from
  210. orders as o
  211. LEFT JOIN (select * from flight ) as f on f.id = o.flightId
  212. LEFT JOIN (select * from air ) as air on air.id = f.airId
  213. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  214. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity
  215. where userId = ?
  216. `
  217. values.push(userId);
  218. // 刚创建
  219. if (orderType === fields.orderType_waitPay){
  220. sql+=` and payState = ?`;
  221. values.push(fields.payState_create);
  222. }
  223. // 已经支付,全部值机,部分值机
  224. if (orderType === fields.orderType_pay){
  225. sql+=` and (payState = ? or payState = ? or payState = ?)`;
  226. values.push(fields.payState_pay,fields.payState_choose,fields.payState_rebates);
  227. }
  228. // 已经取消
  229. if (orderType === fields.orderType_cancel){
  230. sql+=` and (payState = ? or payState = ? or payState = ?)`;
  231. values.push(fields.payState_cancel,fields.payState_timeout,fields.payState_refund);
  232. }
  233. // 已经完成
  234. if (orderType === fields.orderType_end){
  235. sql+=` and payState = ?`;
  236. values.push(fields.payState_end);
  237. }
  238. return mysql.pq(sql,values);
  239. }
  240. /**
  241. * 获取订单机票数量
  242. * @param orderId
  243. * @returns {Promise | Promise<unknown>}
  244. */
  245. function orderTicks(orderId){
  246. let sql=``,values=[];
  247. sql+=`select t.*,p.name from airTicket as t LEFT JOIN (select id,name from travel ) as p on p.id = t.travelId where t.orderId = ?`;
  248. values.push(orderId);
  249. return mysql.pq(sql,values);
  250. }
  251. /**
  252. * 获取机票信息
  253. * @param tickId 机票id
  254. * @returns {Promise | Promise<unknown>}
  255. */
  256. function tickInfo(tickId){
  257. let sql=``,values=[];
  258. sql+=`select * from airTicket where id = ?`;
  259. values.push(tickId);
  260. return mysql.pq(sql,values);
  261. }
  262. /**
  263. * 某个机票进行值机
  264. * @param tickId
  265. * @param row
  266. * @param col
  267. * @param cussTime
  268. * @returns {Promise | Promise<unknown>}
  269. */
  270. function tickChooseToSel(tickId,row,col,cussTime){
  271. let sql=``,values=[];
  272. sql+=`update airTicket set \`row\` = ? , \`col\` = ? ,\`cussTime\`=?, \`tickState\` = ? where id =?`;
  273. values.push(row,col,cussTime,fields.tickState_seat,tickId);
  274. return mysql.pq(sql,values);
  275. }
  276. /**
  277. * 获取航班已经选择的座位列表
  278. * @param flightId
  279. * @returns {Promise | Promise<unknown>}
  280. */
  281. function flightTickSeat(flightId){
  282. let sql=``,values=[];
  283. sql+=`select t.* from airTicket as t ,orders as o
  284. where t.orderId = o.id and o.flightId = ? and t.tickState = ?`;
  285. values.push(flightId,fields.tickState_seat)
  286. return mysql.pq(sql,values);
  287. }
  288. // 查看该
  289. function findTickRowCol(flightId,row,col){
  290. let sql=``,values=[];
  291. sql+=`select t.* from airTicket as t ,orders as o
  292. where t.orderId = o.id and o.flightId = ? and t.row = ? and t.col = ? and t.tickState = ?`;
  293. values.push(flightId,row,col,fields.tickState_seat)
  294. return mysql.pq(sql,values);
  295. }
  296. function tickSearch(params){
  297. let sql=``,values=[];
  298. let fields = Object.keys(params);
  299. fields = fields.filter(field=>params[field])
  300. sql+=`select * from airTicket`;
  301. if(fields.length>=1){sql+=' where' }
  302. for(let field of fields) {
  303. // console.log(`${field} : ${searchItems[field]}`)
  304. if (!params[field]) {
  305. continue;
  306. }
  307. if(values.length>0){sql+=' and'}
  308. sql+=` \`${field}\` = ?`
  309. values.push(params[field])
  310. }
  311. sql+=';';
  312. return mysql.pq(sql,values);
  313. }
  314. /**
  315. * 添加选票
  316. * @param orderId
  317. * @param travelId
  318. * @returns {Promise | Promise<unknown>}
  319. */
  320. function addTick(orderId,travelId){
  321. let sql=``,values=[];
  322. sql+=`insert into airTicket(orderId,travelId) values(?,?)`;
  323. values.push(orderId,travelId);
  324. return mysql.pq(sql,values);
  325. }
  326. /**
  327. * 清除指定订单的所有票
  328. * @param orderId
  329. * @returns {Promise | Promise<unknown>}
  330. */
  331. function clearTick(orderId){
  332. let sql=``,values=[];
  333. sql+=`delete from orders where orderId = ?`;
  334. values.push(orderId);
  335. return mysql.pq(sql,values);
  336. }
  337. /**
  338. * 退票指定订单的所有票
  339. * @param orderId
  340. * @returns {Promise | Promise<unknown>}
  341. */
  342. function refundOrderTick(orderId){
  343. let sql=``,values=[];
  344. sql+=`update airTicket set \`tickState\` = ? where orderId =?`;
  345. values.push(fields.tickState_refund,orderId);
  346. return mysql.pq(sql,values);
  347. }
  348. /**
  349. * 退票指定id
  350. * @param tickId
  351. * @returns {Promise | Promise<unknown>}
  352. */
  353. function refundTick(tickId){
  354. let sql=``,values=[];
  355. sql+=`update airTicket set \`tickState\` = ? where id =?`;
  356. values.push(fields.tickState_refund,tickId);
  357. return mysql.pq(sql,values);
  358. }
  359. function addOrder(userId,flightId,travelIds,createTime){
  360. let sql=``,values=[];
  361. sql+=`insert into orders(userId,flightId,ticketNum,travelIds,createTime) values(?,?,?,?,?)`;
  362. values.push(userId,flightId);
  363. values.push(travelIds.length);
  364. values.push(travelIds.join(','));
  365. values.push(createTime);
  366. return mysql.pq(sql,values);
  367. }
  368. function findOrder(userId,flightId,travelIds,createTime){
  369. let sql=``,values=[];
  370. sql+=`select * from orders where userId = ? and flightId = ? and ticketNum = ? and travelIds = ? and createTime = ?`
  371. // sql+=`insert into orders(userId,flightId,ticketNum,travelIds,createTime) values(?,?,?,?,?)`;
  372. values.push(userId,flightId);
  373. values.push(travelIds.length);
  374. values.push(travelIds.join(','));
  375. values.push(createTime);
  376. return mysql.pq(sql,values);
  377. }
  378. /**
  379. * 用户支付订单
  380. * @param orderId
  381. * @param unitPrice 机票单价
  382. * @param payPrice 订单总价格
  383. * @param payTime 支付时间
  384. * @returns {Promise | Promise<unknown>}
  385. */
  386. function payOrder(orderId,unitPrice,payPrice,payTime){
  387. let sql=``,values=[];
  388. sql+=`update orders set payState = ?,unitPrice = ?,payPrice= ?,payTime = ? where id = ?`
  389. values.push(fields.payState_pay,unitPrice,payPrice,payTime,orderId);
  390. return mysql.pq(sql,values);
  391. }
  392. /**
  393. * 获取平台上所有等待支付的订单
  394. * @returns {Promise | Promise<unknown>}
  395. */
  396. function waitPayOrder(){
  397. let sql=``,values=[];
  398. sql+=`select * from orders where payState = ?`
  399. values.push(fields.payState_create);
  400. return mysql.pq(sql,values);
  401. }
  402. /**
  403. * 修改订单信息
  404. * @param orderId
  405. * @param params
  406. * @returns {Promise | Promise<unknown>}
  407. */
  408. function changeOrder(orderId,params){
  409. let sql=`update orders set`,values=[];
  410. let fields = Object.keys(params);
  411. fields = fields.filter(field=>params[field])
  412. if(fields.length<1){
  413. throw {rcode:code.notParam}
  414. }
  415. for(let field of fields) {
  416. if (!params[field]) {
  417. continue;
  418. }
  419. if(values.length>0){sql+=','}
  420. sql+=` \`${field}\` = ?`
  421. values.push(params[field])
  422. }
  423. sql+=` where id=?`;
  424. values.push(orderId)
  425. return mysql.pq(sql,values);
  426. }
  427. /**
  428. * 获取指定用户的对应订单详细信息
  429. * @param userId
  430. * @param orderId
  431. * @returns {Promise | Promise<unknown>}
  432. */
  433. function userOrderInfo(userId,orderId){
  434. let sql=``,values=[];
  435. // sql+=`select * from orders as o , flight as where userId = ? and id = ?`
  436. sql+=`select
  437. o.*,air.airCode,
  438. f.sailingTime,f.langdinTime,f.flightState,f.flightName,
  439. f.currentPrice,
  440. dep.cityname as departureCityName,
  441. tar.cityname as targetCityName
  442. from
  443. orders as o
  444. LEFT JOIN (select * from flight ) as f on f.id = o.flightId
  445. LEFT JOIN (select * from air ) as air on air.id = f.airId
  446. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  447. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity
  448. where userId = ? and o.id = ?`
  449. values.push(userId,orderId);
  450. return mysql.pq(sql,values);
  451. }
  452. /**
  453. * 指定航班的所有订单完成,部分退款和全部选坐的都
  454. * @param flightId
  455. */
  456. function okOrder(flightId){
  457. let sql=``,values=[];
  458. sql += `update orders set payState = ? where flightId = ? and (payState = ? or chooseNum != 0)`
  459. values.push(fields.payState_end,flightId,fields.payState_choose);
  460. }
  461. module.exports = {
  462. register,
  463. login,
  464. findAccountUser,
  465. findPhoneUser,
  466. changePhone,
  467. changePasswd,
  468. info,
  469. cars,
  470. removeCar,
  471. addCar,
  472. findCar,
  473. removeTravel,
  474. addTravel,
  475. travels,
  476. findUserTravel,
  477. travelInfo,
  478. changeAllTravelState,
  479. changeTravel,
  480. userOrder,
  481. waitPayOrder,
  482. changeOrder,
  483. payOrder,
  484. addOrder,
  485. userOrderInfo,
  486. addTick,
  487. findOrder,
  488. orderTicks,
  489. findTickRowCol,
  490. clearTick,
  491. tickInfo,
  492. tickSearch,
  493. flightTickSeat,
  494. tickChooseToSel,
  495. refundOrderTick,
  496. refundTick,
  497. okOrder
  498. }