d_air.js 8.2 KB

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