1
0

d_air.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  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 [state] 飞机状态,默认为
  13. * @returns {Promise | Promise<unknown>}
  14. */
  15. function airs(state){
  16. let sql=``,values=[];
  17. sql = `select * from air`;
  18. if(state == 1 || state == 2){
  19. sql+= ` where state = ?`
  20. values.push(state)
  21. }
  22. sql+=';';
  23. return mysql.pq(sql,values);
  24. }
  25. function airInfo(airId){
  26. let sql=``,values=[];
  27. sql = `select * from air where id = ?`;
  28. values.push(airId)
  29. sql+=';';
  30. return mysql.pq(sql,values);
  31. }
  32. /**
  33. * 新增飞机
  34. * @param airCode
  35. * @param row
  36. * @param col
  37. * @returns {Promise | Promise<unknown>}
  38. */
  39. function addAir(airCode,row,col){
  40. let sql=``,values=[];
  41. sql = `insert into air(airCode,\`row\`,col) values(?,?,?)`;
  42. sql+=';';
  43. values.push(...arguments);
  44. return mysql.pq(sql,values);
  45. }
  46. /**
  47. * 更新飞机
  48. * @param airId 飞机id
  49. * @param params 要修改的飞机信息
  50. * @returns {Promise | Promise<unknown>}
  51. */
  52. function updateAir(airId,params){
  53. let sql=`update air set`,values=[];
  54. let fields = Object.keys(params);
  55. fields = fields.filter(field=>params[field])
  56. if(fields.length<1){
  57. throw {rcode:code.notParam}
  58. }
  59. for(let field of fields) {
  60. if (!params[field]) {
  61. continue;
  62. }
  63. if(values.length>0){sql+=','}
  64. sql+=` \`${field}\` = ?`
  65. values.push(params[field])
  66. }
  67. sql+=` where id=?`;
  68. values.push(airId)
  69. return mysql.pq(sql,values);
  70. }
  71. /**
  72. * 查询相关航班信息
  73. * @param departureCity 除非城市id
  74. * @param targetCity 目标城市id
  75. * @param [flightState] 航班类型,国内或者国际
  76. * @param [startUnixTime] 出发时间开始,某个时间点之前
  77. * @param [endUnixTime] 出发时间截止,某个时间段内的
  78. * @returns {Promise | Promise<unknown>}
  79. */
  80. function flightSearch(departureCity,targetCity,flightState,startUnixTime,endUnixTime){
  81. let sql=``,values=[];
  82. sql = `select
  83. f.id,f.originalPrice,f.currentPrice,f.sailingTime,f.langdinTime ,
  84. air.airCode,air.row,air.col
  85. dep.cityname as departureCityName,tar.cityname as targetCityName
  86. from
  87. flight as f
  88. LEFT JOIN (select * from air ) as air on air.id = f.airId
  89. LEFT JOIN (select id,cityname from area ) as dep on dep.id = f.departureCity
  90. LEFT JOIN (select id,cityname from area ) as tar on tar.id = f.targetCity;
  91. where f.departureCity = ? and f.targetCity = ?`;
  92. values.push(departureCity,targetCity);
  93. if(flightState){
  94. sql += ` and f.flightState = ?`;
  95. values.push(flightState);
  96. }
  97. if(endUnixTime){
  98. // 如果有结束时间,没有开始时间则默认添加
  99. if (!startUnixTime) startUnixTime=getUnixTimeStamp();
  100. sql += ` and f.sailingTime <= ?`;
  101. values.push(endUnixTime);
  102. }
  103. if(startUnixTime){
  104. sql += ` and f.sailingTime >= ?`;
  105. values.push(startUnixTime);
  106. }
  107. sql+=`;`
  108. return mysql.pq(sql,values);
  109. }
  110. /**
  111. * 显示所有航班列表,管理员级别
  112. * @param routeType
  113. * @returns {Promise | Promise<unknown>}
  114. */
  115. function flightList(){
  116. let sql=``,values=[];
  117. sql=`select f.* ,air.airCode,air.row,air.col,dep.cityname as departureCityName,tar.cityname as targetCityName
  118. from
  119. flight as f
  120. LEFT JOIN (select * from air ) as air on air.id = f.airId
  121. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  122. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity;`;
  123. return mysql.pq(sql,values);
  124. }
  125. /**
  126. * 查询航班对应的订单,仅限新创建以及已经支付的,以及部分退票
  127. * @param flightId 航班id
  128. * @returns {Promise | Promise<unknown>}
  129. */
  130. function flightOrder(flightId){
  131. let sql=``,values=[];
  132. sql+=`select * from orders where flightId = ?
  133. and (payState = ? or payState = ? or payState = ?)`
  134. values.push(
  135. flightId,
  136. fields.payState_pay,
  137. fields.payState_create,
  138. fields.payState_rebates
  139. );
  140. return mysql.pq(sql,values);
  141. }
  142. /**
  143. * 航班具体信息
  144. * @param flightId
  145. * @returns {Promise<unknown>}
  146. */
  147. function flightInfo(flightId){
  148. let sql=``,values=[];
  149. sql+=`select f.*,
  150. air.airCode,air.row,air.col,
  151. dep.cityname as departureCityName,tar.cityname as targetCityName
  152. from
  153. (select * from flight where id = ?) as f
  154. LEFT JOIN (select * from air ) as air on air.id = f.airId
  155. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  156. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity`
  157. values.push(flightId)
  158. return mysql.pq(sql,values);
  159. }
  160. /**
  161. * 添加航班
  162. * @param flightName 航班名
  163. * @param airId 飞机id
  164. * @param originalPrice 原始价格
  165. * @param currentPrice 当前价格
  166. * @param sailingTime 起飞时间
  167. * @param langdinTime 到站时间
  168. * @param totalVotes 机票数量
  169. * @param routeType 线路类型,国际or国内
  170. * @param departureCity 出发城市
  171. * @param targetCity 目标城市
  172. * @returns {Promise<unknown>}
  173. */
  174. function addFlight(flightName,
  175. airId,
  176. originalPrice,
  177. currentPrice,
  178. sailingTime,
  179. langdinTime,
  180. totalVotes,
  181. routeType,
  182. departureCity,
  183. targetCity){
  184. let sql = ``,values = [];
  185. sql = `insert into flight
  186. (flightName,airId,originalPrice,currentPrice,
  187. sailingTime,langdinTime,
  188. totalVotes,routeType,
  189. departureCity,targetCity
  190. ) values(?,?,?,?,?,?,?,?,?,?)`;
  191. values.push(...arguments);
  192. sql += ';'
  193. return mysql.pq(sql,values);
  194. }
  195. /**
  196. * 修改航班信息
  197. * @param flightId
  198. * @param updateOptions
  199. * @returns {Promise<unknown>}
  200. */
  201. function updateFlight(flightId,updateOptions){
  202. let sql=``,values=[];
  203. let _arguments = Array.from(arguments);
  204. // 判断如果所有参数都为空时抛出异常
  205. sql+=`update flight set `
  206. let keys = Object.keys(updateOptions);
  207. if(keys.length < 1){
  208. throw {rcode:code.notParam,msg:'没有修改项'}
  209. }
  210. for(let i = 0;i<keys.length;i++){
  211. let field = keys[i];
  212. if(!updateOptions[field]){continue;}
  213. console.log(i);
  214. if(values.length > 0){sql+=','}
  215. sql+=`${field} = ?`
  216. values.push(updateOptions[field])
  217. }
  218. sql += ` where id = ?;`
  219. values.push(flightId);
  220. return mysql.pq(sql,values);
  221. }
  222. function recommendFlight(){
  223. }
  224. /**
  225. *
  226. * @param searchItems
  227. * @param cityName
  228. * @param page
  229. * @param limit
  230. * @returns {Promise | Promise<unknown>}
  231. */
  232. function searchFlights(searchItems,cityName = true,page = 1,limit){
  233. let sql=`select`,values=[];
  234. if(cityName){
  235. sql+=' f.*,dep.cityname as departureCityName,tar.cityname as targetCityName'
  236. sql+=` from
  237. flight as f
  238. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  239. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity`
  240. }else{
  241. sql+=' f.*';
  242. sql+=` from
  243. flight as f`;
  244. }
  245. sql+=' where '
  246. // 根据类型
  247. let fields = Object.keys(searchItems);
  248. fields = fields.filter(field=>searchItems[field])
  249. if(fields.length<1){
  250. throw {rcode:code.notParam}
  251. }
  252. for(let field of fields){
  253. // console.log(`${field} : ${searchItems[field]}`)
  254. if(!searchItems[field]){
  255. continue;
  256. }
  257. if(values.length>=1)sql += ' and';
  258. if(field === 'startTime'){
  259. sql+=` f.sailingTime >= ?`
  260. }else if(field === 'endTime'){
  261. sql+=` f.sailingTime <= ?`
  262. }else if(field === 'startPrice'){
  263. sql+=` f.currentPrice >= ?`
  264. }else if(field === 'endPrice'){
  265. sql+=` f.currentPrice <= ?`
  266. }else{
  267. sql+=` f.${field} ${searchItems[field].action||'='} ?`
  268. }
  269. values.push(searchItems[field]);
  270. }
  271. sql+=' order by createTime desc'
  272. if(limit){
  273. sql+=` limit ?,?;`
  274. values.push((page-1)*limit,limit)
  275. }
  276. sql+=';'
  277. return mysql.pq(sql,values);
  278. }
  279. /**
  280. * 售票的航班信息
  281. * @param num
  282. * @returns {Promise<unknown>}
  283. */
  284. function sellFlights(num = 5){
  285. let sql=``,values=[];
  286. // 判断状态为
  287. sql+=`select f.id,f.currentPrice,f.sailingTime,f.langdinTime,f.flightState,dep.cityname as departureCityName,tar.cityname as targetCityName
  288. from
  289. flight as f
  290. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  291. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity
  292. where flightState = ? ORDER BY f.createTime desc limit 0,?;`
  293. values.push(fields.flightState_sail,num);
  294. return mysql.pq(sql,values);
  295. }
  296. /**
  297. * 检票中的航班信息
  298. * @param num
  299. * @returns {Promise<unknown>}
  300. */
  301. function wicketFlights(num = 5){
  302. let sql=``,values=[];
  303. // 判断状态为
  304. sql+=`select f.id,f.currentPrice,f.sailingTime,f.langdinTime,f.flightState,f.createTime,dep.cityname as departureCityName,tar.cityname as targetCityName
  305. from
  306. flight as f
  307. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  308. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity
  309. where flightState = ? ORDER BY f.sailingTime desc limit 0,?;`
  310. values.push(fields.flightState_wicket,num);
  311. return mysql.pq(sql,values);
  312. }
  313. module.exports = {
  314. flightSearch,
  315. addFlight,
  316. updateFlight,
  317. flightList,
  318. flightInfo,
  319. wicketFlights,
  320. searchFlights,
  321. sellFlights,
  322. flightOrder,
  323. airs,
  324. addAir,
  325. airInfo,
  326. updateAir
  327. }