const field = require('../maps/field'); const mysql = require('./mysql'); const until_time = require('../until/time'); const {getUnixTimeStamp} = require("../until/time"); const code = require("../maps/rcodeMap"); const fields = require("../maps/field"); const checkArgumentsIsEmpty = require("../until/checkArgumentsIsEmpty"); const {loadFlights} = require("./d_recommend"); // 查询指定城市航班 /** * 获取飞机列表 * @param [state] 飞机状态,默认为 * @returns {Promise | Promise} */ function airs(state){ let sql=``,values=[]; sql = `select * from air`; if(state == 1 || state == 2){ sql+= ` where state = ?` values.push(state) } sql+=';'; return mysql.pq(sql,values); } function airInfo(airId){ let sql=``,values=[]; sql = `select * from air where id = ?`; values.push(airId) sql+=';'; return mysql.pq(sql,values); } /** * 新增飞机 * @param airCode * @param row * @param col * @returns {Promise | Promise} */ function addAir(airCode,row,col){ let sql=``,values=[]; sql = `insert into air(airCode,\`row\`,col) values(?,?,?)`; sql+=';'; values.push(...arguments); return mysql.pq(sql,values); } /** * 更新飞机 * @param airId 飞机id * @param params 要修改的飞机信息 * @returns {Promise | Promise} */ function updateAir(airId,params){ let sql=`update air set`,values=[]; let fields = Object.keys(params); fields = fields.filter(field=>params[field]) if(fields.length<1){ throw {rcode:code.notParam} } for(let field of fields) { if (!params[field]) { continue; } if(values.length>0){sql+=','} sql+=` \`${field}\` = ?` values.push(params[field]) } sql+=` where id=?`; values.push(airId) return mysql.pq(sql,values); } /** * 查询相关航班信息 * @param departureCity 除非城市id * @param targetCity 目标城市id * @param [flightState] 航班类型,国内或者国际 * @param [startUnixTime] 出发时间开始,某个时间点之前 * @param [endUnixTime] 出发时间截止,某个时间段内的 * @returns {Promise | Promise} */ function flightSearch(departureCity,targetCity,flightState,startUnixTime,endUnixTime){ let sql=``,values=[]; sql = `select f.id,f.originalPrice,f.currentPrice,f.sailingTime,f.langdinTime , air.airCode,air.row,air.col dep.cityname as departureCityName,tar.cityname as targetCityName from flight as f LEFT JOIN (select * from air ) as air on air.id = f.airId LEFT JOIN (select id,cityname from area ) as dep on dep.id = f.departureCity LEFT JOIN (select id,cityname from area ) as tar on tar.id = f.targetCity; where f.departureCity = ? and f.targetCity = ?`; values.push(departureCity,targetCity); if(flightState){ sql += ` and f.flightState = ?`; values.push(flightState); } if(endUnixTime){ // 如果有结束时间,没有开始时间则默认添加 if (!startUnixTime) startUnixTime=getUnixTimeStamp(); sql += ` and f.sailingTime <= ?`; values.push(endUnixTime); } if(startUnixTime){ sql += ` and f.sailingTime >= ?`; values.push(startUnixTime); } sql+=`;` return mysql.pq(sql,values); } /** * 显示所有航班列表,管理员级别 * @param routeType * @returns {Promise | Promise} */ function flightList(){ let sql=``,values=[]; sql=`select f.* ,air.airCode,air.row,air.col,dep.cityname as departureCityName,tar.cityname as targetCityName from flight as f LEFT JOIN (select * from air ) as air on air.id = f.airId LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity;`; return mysql.pq(sql,values); } /** * 查询航班对应的订单,仅限新创建以及已经支付的,以及部分退票 * @param flightId 航班id * @returns {Promise | Promise} */ function flightOrder(flightId){ let sql=``,values=[]; sql+=`select * from orders where flightId = ? and (payState = ? or payState = ? or payState = ?)` values.push( flightId, fields.payState_pay, fields.payState_create, fields.payState_rebates ); return mysql.pq(sql,values); } /** * 航班具体信息 * @param flightId * @returns {Promise} */ function flightInfo(flightId){ let sql=``,values=[]; sql+=`select f.*, air.airCode,air.row,air.col, dep.cityname as departureCityName,tar.cityname as targetCityName from (select * from flight where id = ?) as f LEFT JOIN (select * from air ) as air on air.id = f.airId LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity` values.push(flightId) return mysql.pq(sql,values); } /** * 添加航班 * @param flightName 航班名 * @param airId 飞机id * @param originalPrice 原始价格 * @param currentPrice 当前价格 * @param sailingTime 起飞时间 * @param langdinTime 到站时间 * @param totalVotes 机票数量 * @param routeType 线路类型,国际or国内 * @param departureCity 出发城市 * @param targetCity 目标城市 * @returns {Promise} */ function addFlight(flightName, airId, originalPrice, currentPrice, sailingTime, langdinTime, totalVotes, routeType, departureCity, targetCity){ let sql = ``,values = []; sql = `insert into flight (flightName,airId,originalPrice,currentPrice, sailingTime,langdinTime, totalVotes,routeType, departureCity,targetCity ) values(?,?,?,?,?,?,?,?,?,?)`; values.push(...arguments); sql += ';' return mysql.pq(sql,values); } /** * 修改航班信息 * @param flightId * @param updateOptions * @returns {Promise} */ function updateFlight(flightId,updateOptions){ let sql=``,values=[]; let _arguments = Array.from(arguments); // 判断如果所有参数都为空时抛出异常 sql+=`update flight set ` let keys = Object.keys(updateOptions); if(keys.length < 1){ throw {rcode:code.notParam,msg:'没有修改项'} } for(let i = 0;i 0){sql+=','} sql+=`${field} = ?` values.push(updateOptions[field]) } sql += ` where id = ?;` values.push(flightId); return mysql.pq(sql,values); } function recommendFlight(){ } /** * * @param searchItems * @param cityName * @param page * @param limit * @returns {Promise | Promise} */ function searchFlights(searchItems,cityName = true,page = 1,limit){ let sql=`select`,values=[]; if(cityName){ sql+=' f.*,dep.cityname as departureCityName,tar.cityname as targetCityName' sql+=` from flight as f LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity` }else{ sql+=' f.*'; sql+=` from flight as f`; } sql+=' where ' // 根据类型 let fields = Object.keys(searchItems); fields = fields.filter(field=>searchItems[field]) if(fields.length<1){ throw {rcode:code.notParam} } for(let field of fields){ // console.log(`${field} : ${searchItems[field]}`) if(!searchItems[field]){ continue; } if(values.length>=1)sql += ' and'; if(field === 'startTime'){ sql+=` f.sailingTime >= ?` }else if(field === 'endTime'){ sql+=` f.sailingTime <= ?` }else if(field === 'startPrice'){ sql+=` f.currentPrice >= ?` }else if(field === 'endPrice'){ sql+=` f.currentPrice <= ?` }else{ sql+=` f.${field} ${searchItems[field].action||'='} ?` } values.push(searchItems[field]); } sql+=' order by createTime desc' if(limit){ sql+=` limit ?,?;` values.push((page-1)*limit,limit) } sql+=';' return mysql.pq(sql,values); } /** * 售票的航班信息 * @param num * @returns {Promise} */ function sellFlights(num = 5){ let sql=``,values=[]; // 判断状态为 sql+=`select f.id,f.currentPrice,f.sailingTime,f.langdinTime,f.flightState,dep.cityname as departureCityName,tar.cityname as targetCityName from flight as f LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity where flightState = ? ORDER BY f.createTime desc limit 0,?;` values.push(fields.flightState_sail,num); return mysql.pq(sql,values); } /** * 检票中的航班信息 * @param num * @returns {Promise} */ function wicketFlights(num = 5){ let sql=``,values=[]; // 判断状态为 sql+=`select f.id,f.currentPrice,f.sailingTime,f.langdinTime,f.flightState,f.createTime,dep.cityname as departureCityName,tar.cityname as targetCityName from flight as f LEFT JOIN (select id,cityName from area ) as dep on dep.id = f.departureCity LEFT JOIN (select id,cityName from area ) as tar on tar.id = f.targetCity where flightState = ? ORDER BY f.sailingTime desc limit 0,?;` values.push(fields.flightState_wicket,num); return mysql.pq(sql,values); } module.exports = { flightSearch, addFlight, updateFlight, flightList, flightInfo, wicketFlights, searchFlights, sellFlights, flightOrder, airs, addAir, airInfo, updateAir }