d_air.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. const field = require('../maps/field');
  2. const mysql = require('./mysql');
  3. const until_time = require('../until/time');
  4. const {getUnixTimeStamp} = require("../until/time");
  5. const code = require("../maps/rcodeMap");
  6. const fields = require("../maps/field");
  7. const checkArgumentsIsEmpty = require("../until/checkArgumentsIsEmpty");
  8. // 查询指定城市航班
  9. /**
  10. * 查询相关航班信息
  11. * @param departureCity 除非城市id
  12. * @param targetCity 目标城市id
  13. * @param [routeType] 航班类型,国内或者国际
  14. * @param [startUnixTime] 出发时间开始,某个时间点之前
  15. * @param [endUnixTime] 出发时间截止,某个时间段内的
  16. * @returns {Promise | Promise<unknown>}
  17. */
  18. function flightSearch(departureCity,targetCity,routeType,startUnixTime,endUnixTime){
  19. let sql=``,values=[];
  20. sql = `select f.id,f.originalPrice,f.currentPrice,f.sailingTime,f.langdinTime ,dep.cityname as departureCityName,tar.cityname as targetCityName
  21. from
  22. flight as f
  23. LEFT JOIN (select id,cityname from area ) as dep on dep.id = f.departureCity
  24. LEFT JOIN (select id,cityname from area ) as tar on tar.id = f.targetCity;
  25. where f.departureCity = ? and f.targetCity = ?`;
  26. values.push(departureCity,targetCity);
  27. if(routeType){
  28. sql += ` and f.routerType = ?`;
  29. values.push(routeType);
  30. }
  31. if(endUnixTime){
  32. // 如果有结束时间,没有开始时间则默认添加
  33. if (!startUnixTime) startUnixTime=getUnixTimeStamp();
  34. sql += ` and f.sailingTime <= ?`;
  35. values.push(endUnixTime);
  36. }
  37. if(startUnixTime){
  38. sql += ` and f.sailingTime >= ?`;
  39. values.push(startUnixTime);
  40. }
  41. sql+=`;`
  42. return mysql.pq(sql,values);
  43. }
  44. /**
  45. * 显示所有航班列表,管理员级别
  46. * @param routeType
  47. * @returns {Promise | Promise<unknown>}
  48. */
  49. function flightList(){
  50. let sql=``,values=[];
  51. sql=`select f.* ,dep.cityname as departureCityName,tar.cityname as targetCityName
  52. from
  53. flight as f
  54. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  55. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity;`;
  56. return mysql.pq(sql,values);
  57. }
  58. /**
  59. * 航班具体信息
  60. * @param flightId
  61. * @returns {Promise<unknown>}
  62. */
  63. function flightInfo(flightId){
  64. let sql=``,values=[];
  65. sql+=`select ff.*,count(flightId = ? or null) as pay
  66. from
  67. (select * from flight where id = ?) as ff,
  68. airTickets;`
  69. values.push(flightId,flightId)
  70. return mysql.pq(sql,values);
  71. }
  72. /**
  73. * 获取航班票数
  74. * @param flightId
  75. * @returns {Promise<unknown>}
  76. */
  77. function flightTicks(flightId){
  78. let sql=``,values=[];
  79. sql=`select ff.*,count(t.flightId = ? or null) as pay
  80. from
  81. (select totalVotes from flight where id = ?) as ff,
  82. airTickets as t`;
  83. values.push(flightId,flightId);
  84. return mysql.pq(sql,values);
  85. }
  86. /**
  87. * 添加航班
  88. * @param flightName 航班名
  89. * @param airCode 飞机代码
  90. * @param originalPrice 原始价格
  91. * @param currentPrice 当前价格
  92. * @param sailingTime 起飞时间
  93. * @param langdinTime 到站时间
  94. * @param totalVotes 机票数量
  95. * @param routeType 线路类型,国际or国内
  96. * @param departureCity 出发城市
  97. * @param targetCity 目标城市
  98. * @returns {Promise<unknown>}
  99. */
  100. function addFlight(flightName,
  101. airCode,
  102. originalPrice,
  103. currentPrice,
  104. sailingTime,
  105. langdinTime,
  106. totalVotes,
  107. routeType,
  108. departureCity,
  109. targetCity){
  110. let sql = ``,values = [];
  111. sql = `insert into flight
  112. (flightName,airCode,originalPrice,currentPrice,
  113. sailingTime,langdinTime,
  114. totalVotes,routeType,
  115. departureCity,targetCity
  116. ) values(?,?,?,?,?,?,?,?,?,?)`;
  117. values.push(...arguments);
  118. sql += ';'
  119. return mysql.pq(sql,values);
  120. }
  121. /**
  122. * 修改航班信息
  123. * @param flightId
  124. * @param updateOptions
  125. * @returns {Promise<unknown>}
  126. */
  127. function updateFlight(flightId,updateOptions){
  128. let sql=``,values=[];
  129. let _arguments = Array.from(arguments);
  130. // 判断如果所有参数都为空时抛出异常
  131. sql+=`update flight set `
  132. let keys = Object.keys(updateOptions);
  133. if(keys.length < 1){
  134. throw {rcode:code.notParam,msg:'没有修改项'}
  135. }
  136. for(let i = 0;i<keys.length;i++){
  137. let field = keys[i];
  138. if(!updateOptions[field]){continue;}
  139. console.log(i);
  140. if(values.length > 0){sql+=','}
  141. sql+=`${field} = ?`
  142. values.push(updateOptions[field])
  143. }
  144. sql += ` where id = ?;`
  145. values.push(flightId);
  146. return mysql.pq(sql,values);
  147. }
  148. function recommendFlight(){
  149. }
  150. /**
  151. * 售票的航班信息
  152. * @param num
  153. * @returns {Promise<unknown>}
  154. */
  155. function sailFlights(num = 5){
  156. let sql=``,values=[];
  157. // 判断状态为
  158. sql+=`select f.id,f.currentPrice,f.sailingTime,f.langdinTime,dep.cityname as departureCityName,tar.cityname as targetCityName
  159. from
  160. flight as f
  161. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  162. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity
  163. where flightState = ? ORDER BY f.createTime desc limit 0,?;`
  164. values.push(fields.flightState_sail,num);
  165. return mysql.pq(sql,values);
  166. }
  167. /**
  168. * 检票中的航班信息
  169. * @param num
  170. * @returns {Promise<unknown>}
  171. */
  172. function wicketFlights(num = 5){
  173. let sql=``,values=[];
  174. // 判断状态为
  175. sql+=`select f.id,f.currentPrice,f.sailingTime,f.langdinTime,f.createTime,dep.cityname as departureCityName,tar.cityname as targetCityName
  176. from
  177. flight as f
  178. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  179. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity
  180. where flightState = ? ORDER BY f.sailingTime desc limit 0,?;`
  181. values.push(fields.flightState_wicket,num);
  182. return mysql.pq(sql,values);
  183. }
  184. module.exports = {
  185. flightSearch,
  186. addFlight,
  187. flightTicks,
  188. updateFlight,
  189. flightList,
  190. flightInfo,
  191. wicketFlights,
  192. sailFlights
  193. }