d_air.js 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  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 as t
  73. where t.payState != '1' and t.payState != '4';`
  74. values.push(flightId,flightId)
  75. return mysql.pq(sql,values);
  76. }
  77. /**
  78. * 获取航班票数
  79. * @param flightId
  80. * @returns {Promise<unknown>}
  81. */
  82. function flightTicks(flightId){
  83. let sql=``,values=[];
  84. sql=`select ff.*,count(t.flightId = ? or null) as pay
  85. from
  86. (select totalVotes from flight where id = ?) as ff,
  87. airTickets as t
  88. where t.payState != '1' and t.payState != '4'`;
  89. values.push(flightId,flightId);
  90. return mysql.pq(sql,values);
  91. }
  92. /**
  93. * 添加航班
  94. * @param flightName 航班名
  95. * @param airCode 飞机代码
  96. * @param originalPrice 原始价格
  97. * @param currentPrice 当前价格
  98. * @param sailingTime 起飞时间
  99. * @param langdinTime 到站时间
  100. * @param totalVotes 机票数量
  101. * @param routeType 线路类型,国际or国内
  102. * @param departureCity 出发城市
  103. * @param targetCity 目标城市
  104. * @returns {Promise<unknown>}
  105. */
  106. function addFlight(flightName,
  107. airCode,
  108. originalPrice,
  109. currentPrice,
  110. sailingTime,
  111. langdinTime,
  112. totalVotes,
  113. routeType,
  114. departureCity,
  115. targetCity){
  116. let sql = ``,values = [];
  117. sql = `insert into flight
  118. (flightName,airCode,originalPrice,currentPrice,
  119. sailingTime,langdinTime,
  120. totalVotes,routeType,
  121. departureCity,targetCity
  122. ) values(?,?,?,?,?,?,?,?,?,?)`;
  123. values.push(...arguments);
  124. sql += ';'
  125. return mysql.pq(sql,values);
  126. }
  127. /**
  128. * 修改航班信息
  129. * @param flightId
  130. * @param updateOptions
  131. * @returns {Promise<unknown>}
  132. */
  133. function updateFlight(flightId,updateOptions){
  134. let sql=``,values=[];
  135. let _arguments = Array.from(arguments);
  136. // 判断如果所有参数都为空时抛出异常
  137. sql+=`update flight set `
  138. let keys = Object.keys(updateOptions);
  139. if(keys.length < 1){
  140. throw {rcode:code.notParam,msg:'没有修改项'}
  141. }
  142. for(let i = 0;i<keys.length;i++){
  143. let field = keys[i];
  144. if(!updateOptions[field]){continue;}
  145. console.log(i);
  146. if(values.length > 0){sql+=','}
  147. sql+=`${field} = ?`
  148. values.push(updateOptions[field])
  149. }
  150. sql += ` where id = ?;`
  151. values.push(flightId);
  152. return mysql.pq(sql,values);
  153. }
  154. function recommendFlight(){
  155. }
  156. /**
  157. *
  158. * @param searchItems
  159. * @param cityName
  160. * @param page
  161. * @param limit
  162. * @returns {Promise | Promise<unknown>}
  163. */
  164. function searchFlights(searchItems,cityName = true,page = 1,limit){
  165. let sql=`select`,values=[];
  166. if(cityName){
  167. sql+=' f.*,dep.cityname as departureCityName,tar.cityname as targetCityName'
  168. sql+=` from
  169. flight as f
  170. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  171. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity`
  172. }else{
  173. sql+=' f.*';
  174. sql+=` from
  175. flight as f`;
  176. }
  177. sql+=' where '
  178. // 根据类型
  179. let fields = Object.keys(searchItems);
  180. fields = fields.filter(field=>searchItems[field])
  181. if(fields.length<1){
  182. throw {rcode:code.notParam}
  183. }
  184. for(let field of fields){
  185. // console.log(`${field} : ${searchItems[field]}`)
  186. if(!searchItems[field]){
  187. continue;
  188. }
  189. if(values.length>=1)sql += ' and';
  190. if(field === 'startTime'){
  191. sql+=` f.sailingTime >= ?`
  192. }else if(field === 'endTime'){
  193. sql+=` f.sailingTime <= ?`
  194. }else if(field === 'startPrice'){
  195. sql+=` f.currentPrice >= ?`
  196. }else if(field === 'endPrice'){
  197. sql+=` f.currentPrice <= ?`
  198. }else{
  199. sql+=` f.${field} ${searchItems[field].action||'='} ?`
  200. }
  201. values.push(searchItems[field]);
  202. }
  203. sql+=' order by createTime desc'
  204. if(limit){
  205. sql+=` limit ?,?;`
  206. values.push((page-1)*limit,limit)
  207. }
  208. sql+=';'
  209. return mysql.pq(sql,values);
  210. }
  211. /**
  212. * 售票的航班信息
  213. * @param num
  214. * @returns {Promise<unknown>}
  215. */
  216. function sellFlights(num = 5){
  217. let sql=``,values=[];
  218. // 判断状态为
  219. sql+=`select f.id,f.currentPrice,f.sailingTime,f.langdinTime,f.flightState,dep.cityname as departureCityName,tar.cityname as targetCityName
  220. from
  221. flight as f
  222. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  223. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity
  224. where flightState = ? ORDER BY f.createTime desc limit 0,?;`
  225. values.push(fields.flightState_sail,num);
  226. return mysql.pq(sql,values);
  227. }
  228. /**
  229. * 检票中的航班信息
  230. * @param num
  231. * @returns {Promise<unknown>}
  232. */
  233. function wicketFlights(num = 5){
  234. let sql=``,values=[];
  235. // 判断状态为
  236. sql+=`select f.id,f.currentPrice,f.sailingTime,f.langdinTime,f.flightState,f.createTime,dep.cityname as departureCityName,tar.cityname as targetCityName
  237. from
  238. flight as f
  239. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  240. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity
  241. where flightState = ? ORDER BY f.sailingTime desc limit 0,?;`
  242. values.push(fields.flightState_wicket,num);
  243. return mysql.pq(sql,values);
  244. }
  245. module.exports = {
  246. flightSearch,
  247. addFlight,
  248. flightTicks,
  249. updateFlight,
  250. flightList,
  251. flightInfo,
  252. wicketFlights,
  253. searchFlights,
  254. sellFlights
  255. }