d_air.js 5.6 KB

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