d_air.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  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 flightId
  163. * @returns {Promise<unknown>}
  164. */
  165. function flightTicks(flightId){
  166. let sql=``,values=[];
  167. sql=`select ff.*,count(t.flightId = ? or null) as pay
  168. from
  169. (select totalVotes from flight where id = ?) as ff,
  170. airTickets as t
  171. where t.payState != '1' and t.payState != '4'`;
  172. values.push(flightId,flightId);
  173. return mysql.pq(sql,values);
  174. }
  175. /**
  176. * 添加航班
  177. * @param flightName 航班名
  178. * @param airCode 飞机代码
  179. * @param originalPrice 原始价格
  180. * @param currentPrice 当前价格
  181. * @param sailingTime 起飞时间
  182. * @param langdinTime 到站时间
  183. * @param totalVotes 机票数量
  184. * @param routeType 线路类型,国际or国内
  185. * @param departureCity 出发城市
  186. * @param targetCity 目标城市
  187. * @returns {Promise<unknown>}
  188. */
  189. function addFlight(flightName,
  190. airId,
  191. originalPrice,
  192. currentPrice,
  193. sailingTime,
  194. langdinTime,
  195. totalVotes,
  196. routeType,
  197. departureCity,
  198. targetCity){
  199. let sql = ``,values = [];
  200. sql = `insert into flight
  201. (flightName,airId,originalPrice,currentPrice,
  202. sailingTime,langdinTime,
  203. totalVotes,routeType,
  204. departureCity,targetCity
  205. ) values(?,?,?,?,?,?,?,?,?,?)`;
  206. values.push(...arguments);
  207. sql += ';'
  208. return mysql.pq(sql,values);
  209. }
  210. /**
  211. * 修改航班信息
  212. * @param flightId
  213. * @param updateOptions
  214. * @returns {Promise<unknown>}
  215. */
  216. function updateFlight(flightId,updateOptions){
  217. let sql=``,values=[];
  218. let _arguments = Array.from(arguments);
  219. // 判断如果所有参数都为空时抛出异常
  220. sql+=`update flight set `
  221. let keys = Object.keys(updateOptions);
  222. if(keys.length < 1){
  223. throw {rcode:code.notParam,msg:'没有修改项'}
  224. }
  225. for(let i = 0;i<keys.length;i++){
  226. let field = keys[i];
  227. if(!updateOptions[field]){continue;}
  228. console.log(i);
  229. if(values.length > 0){sql+=','}
  230. sql+=`${field} = ?`
  231. values.push(updateOptions[field])
  232. }
  233. sql += ` where id = ?;`
  234. values.push(flightId);
  235. return mysql.pq(sql,values);
  236. }
  237. function recommendFlight(){
  238. }
  239. /**
  240. *
  241. * @param searchItems
  242. * @param cityName
  243. * @param page
  244. * @param limit
  245. * @returns {Promise | Promise<unknown>}
  246. */
  247. function searchFlights(searchItems,cityName = true,page = 1,limit){
  248. let sql=`select`,values=[];
  249. if(cityName){
  250. sql+=' f.*,dep.cityname as departureCityName,tar.cityname as targetCityName'
  251. sql+=` from
  252. flight as f
  253. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  254. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity`
  255. }else{
  256. sql+=' f.*';
  257. sql+=` from
  258. flight as f`;
  259. }
  260. sql+=' where '
  261. // 根据类型
  262. let fields = Object.keys(searchItems);
  263. fields = fields.filter(field=>searchItems[field])
  264. if(fields.length<1){
  265. throw {rcode:code.notParam}
  266. }
  267. for(let field of fields){
  268. // console.log(`${field} : ${searchItems[field]}`)
  269. if(!searchItems[field]){
  270. continue;
  271. }
  272. if(values.length>=1)sql += ' and';
  273. if(field === 'startTime'){
  274. sql+=` f.sailingTime >= ?`
  275. }else if(field === 'endTime'){
  276. sql+=` f.sailingTime <= ?`
  277. }else if(field === 'startPrice'){
  278. sql+=` f.currentPrice >= ?`
  279. }else if(field === 'endPrice'){
  280. sql+=` f.currentPrice <= ?`
  281. }else{
  282. sql+=` f.${field} ${searchItems[field].action||'='} ?`
  283. }
  284. values.push(searchItems[field]);
  285. }
  286. sql+=' order by createTime desc'
  287. if(limit){
  288. sql+=` limit ?,?;`
  289. values.push((page-1)*limit,limit)
  290. }
  291. sql+=';'
  292. return mysql.pq(sql,values);
  293. }
  294. /**
  295. * 售票的航班信息
  296. * @param num
  297. * @returns {Promise<unknown>}
  298. */
  299. function sellFlights(num = 5){
  300. let sql=``,values=[];
  301. // 判断状态为
  302. sql+=`select f.id,f.currentPrice,f.sailingTime,f.langdinTime,f.flightState,dep.cityname as departureCityName,tar.cityname as targetCityName
  303. from
  304. flight as f
  305. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  306. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity
  307. where flightState = ? ORDER BY f.createTime desc limit 0,?;`
  308. values.push(fields.flightState_sail,num);
  309. return mysql.pq(sql,values);
  310. }
  311. /**
  312. * 检票中的航班信息
  313. * @param num
  314. * @returns {Promise<unknown>}
  315. */
  316. function wicketFlights(num = 5){
  317. let sql=``,values=[];
  318. // 判断状态为
  319. sql+=`select f.id,f.currentPrice,f.sailingTime,f.langdinTime,f.flightState,f.createTime,dep.cityname as departureCityName,tar.cityname as targetCityName
  320. from
  321. flight as f
  322. LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity
  323. LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity
  324. where flightState = ? ORDER BY f.sailingTime desc limit 0,?;`
  325. values.push(fields.flightState_wicket,num);
  326. return mysql.pq(sql,values);
  327. }
  328. module.exports = {
  329. flightSearch,
  330. addFlight,
  331. flightTicks,
  332. updateFlight,
  333. flightList,
  334. flightInfo,
  335. wicketFlights,
  336. searchFlights,
  337. sellFlights,
  338. flightOrder,
  339. airs,
  340. addAir,
  341. airInfo,
  342. updateAir
  343. }