Bladeren bron

航班与城市相关数据库操作

kindring 3 jaren geleden
bovenliggende
commit
0ff04ff69e
4 gewijzigde bestanden met toevoegingen van 138 en 8 verwijderingen
  1. 24 4
      controller/c_flight.js
  2. 66 3
      database/d_air.js
  3. 44 1
      routes/flight_api.js
  4. 4 0
      until/string_action.js

+ 24 - 4
controller/c_flight.js

@@ -4,17 +4,18 @@ const db_area = require('../database/d_area')
 const handle = require('../until/handle')
 const field = require('../maps/field')
 const codeMap = require('../maps/rcodeMap')
-
+const str_action = require('../until/string_action')
+let offsetTime = 7 * 24 * 60 * 60;
 /**
  * 用户查询指定出发时间的航班
  * @param departureCity 出发城市
  * @param targetCity 目标城市
- * @param routeType 航线类型
+ * @param flightState 航线类型
  * @param startUnixTime 起飞时间开始
  * @param endUnixTime 起飞时间结束
  * @returns {Promise<*>}
  */
-async function searchFlight(departureCity,targetCity,routeType,startUnixTime,endUnixTime){
+async function searchFlight(departureCity,targetCity,flightState,startUnixTime,endUnixTime){
     let [err,result] = await handle(db_air.flightSearch(...arguments));
     if(err){throw err}
     return result;
@@ -45,6 +46,24 @@ async function flightInfo(flightId){
     return result[0];
 }
 
+async function searchFlights(state,options,page,limie){
+    console.log(options);
+    let searchItems = {
+        departureCity:options.departureCity,
+        targetCity:options.targetCity,
+        startTime:options.startTime?(options.startTime-0)/1000:((new Date().getTime()-0)/1000),
+        endTime:options.endTime?(options.endTime-0)/1000:((new Date().getTime()-0)/1000)+offsetTime,
+        flightState: state,
+        routeType: options.routeType,
+        isLate: options.isLate,
+        startPrice: options.startPrice,
+        endPrice: options.endPrice,
+    }
+    let [err,result] = await handle(db_air.searchFlights(searchItems));
+    if(err){throw err}
+    console.log(result)
+    return result;
+}
 
 /**
  * 新增航班
@@ -181,5 +200,6 @@ module.exports = {
     addFlight,
     updateFlight,
     flightInfo,
-    news
+    news,
+    searchFlights
 }

+ 66 - 3
database/d_air.js

@@ -5,6 +5,7 @@ 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");
 // 查询指定城市航班
 
 
@@ -17,7 +18,7 @@ const checkArgumentsIsEmpty = require("../until/checkArgumentsIsEmpty");
  * @param [endUnixTime] 出发时间截止,某个时间段内的
  * @returns {Promise | Promise<unknown>}
  */
-function flightSearch(departureCity,targetCity,routeType,startUnixTime,endUnixTime){
+function flightSearch(departureCity,targetCity,flightState,startUnixTime,endUnixTime){
     let sql=``,values=[];
     sql = `select f.id,f.originalPrice,f.currentPrice,f.sailingTime,f.langdinTime ,dep.cityname as departureCityName,tar.cityname as targetCityName
             from
@@ -68,9 +69,12 @@ function flightList(){
  */
 function flightInfo(flightId){
     let sql=``,values=[];
-    sql+=`select ff.*,count(flightId = ? or null) as pay
+    sql+=`select ff.*,count(flightId = ? or null) as pay,
+            dep.cityname as departureCityName,tar.cityname as targetCityName
             from 
-            (select * from flight where id = ?) as ff,
+            (select * from flight where id = ?) as ff
+            LEFT JOIN (select id,cityName from area ) as dep on dep.id = ff.departureCity
+            LEFT JOIN (select id,cityName from area ) as tar on tar.id = ff.targetCity,
             airTickets;`
     values.push(flightId,flightId)
     return mysql.pq(sql,values);
@@ -163,6 +167,64 @@ function recommendFlight(){
 
 }
 
+
+/**
+ *
+ * @param searchItems
+ * @param cityName
+ * @param page
+ * @param limit
+ * @returns {Promise | Promise<unknown>}
+ */
+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
@@ -207,5 +269,6 @@ module.exports = {
     flightList,
     flightInfo,
     wicketFlights,
+    searchFlights,
     sellFlights
 }

+ 44 - 1
routes/flight_api.js

@@ -36,7 +36,7 @@ router.post('/search',
         let params = [
              req.body.departure,
              req.body.target,
-             req.body.routeType,
+             req.body.flightState,
              req.body.startTime,
              req.body.endTime,
         ]
@@ -178,6 +178,49 @@ router.get('/news',async (req,res)=>{
     }
 })
 
+
+router.post('/sells',
+    paramsCheck({
+        post:{
+            departureCity:{required:true},
+            targetCity:{required:true},
+        }
+    }),
+    async (req,res)=>{
+        try{
+            let results = await c_flight.searchFlights(field.flightState_sail,req.body);
+            res.json({
+                rcode: code.ok,
+                data: results
+            })
+        }catch (error) {
+            if (error.rcode !== code.customError) {
+                console.log(error);
+            }
+            res.json({
+                rcode: error.rcode || code.serverError,
+                msg: error.msg || error.message
+            });
+        }
+    })
+router.get('/sellist',
+    async (req,res)=>{
+        try{
+            let results = await c_flight.searchFlights(field.flightState_sail, {});
+            res.json({
+                rcode: code.ok,
+                data: results
+            })
+        }catch (error) {
+            if (error.rcode !== code.customError) {
+                console.log(error);
+            }
+            res.json({
+                rcode: error.rcode || code.serverError,
+                msg: error.msg || error.message
+            });
+        }
+    });
 router.post('/state',
     checkLogin(field.adminType),
     paramsCheck({

+ 4 - 0
until/string_action.js

@@ -0,0 +1,4 @@
+module.exports = function (str1,action,str2){
+    str1.__proto__[action]=str2;
+    return str1;
+}