kindring 2 rokov pred
rodič
commit
3e2250f3c3

+ 40 - 1
controller/account.js

@@ -343,6 +343,36 @@ async function addOrder(account,flightId,travelIds){
     return result[0]||{};
 }
 
+// 退票订单
+async function refundOrder(account,orderId){
+    let userId,order,ticks,isRefund = false;
+    // order.travelIds = undefined;
+    // 根据账号查找id
+    let [err,result] = await handle(info(userType,account));
+    if(err)throw err;
+    userId = result.id;
+    [err,result] = await handle(db_user.userOrderInfo(userId,orderId));
+    if(err)throw err;
+    if(result.length < 1){ throw {rcode:codeMap.notFound,msg:'无法找到相关订单'} }
+    order = result[0];
+    // 获取所有车票信息,只有在已经支付后才有
+    [err,ticks] = await handle(db_user.orderTicks(order.id));
+    if(err)throw err;
+    // 判断是否有机票已经退款了
+    for (const tick of ticks) {
+        if(tick.tickState == field.tickState_seat){
+            throw {rcode:codeMap.customError,msg:'该订单部分机票已经值机不允许退票'}
+        }
+    }
+    // 订单设置为退票状态
+    [err,result] = await handle(db_user.changeOrder(orderId, {payState:field.payState_refund}));
+    if(err)throw err;
+    // 退票所有乘客
+    [err,result] = await handle(db_user.refundOrderTick(orderId));
+    if(err)throw err;
+    return result;
+}
+
 /**
  * 支付订单
  * @param account 账户
@@ -405,7 +435,7 @@ async function chooseSit(account,tickId,row,col){
     if(err)throw err;
     if(result.length > 0){throw {rcode:codeMap.dataRepeat,msg:'该位置已经被占用了呢'}}
     // 设置座位
-    [err,result] = await handle(db_user.tickChooseToSel(tickId,row,col))
+    [err,result] = await handle(db_user.tickChooseToSel(tickId,row,col,getUnixTimeStamp()))
     if(err)throw err;
     // 遍历查看订单是否全部选坐完成.全部选坐完成则
     travels=order.travelIds.split(',');
@@ -435,7 +465,12 @@ async function refundTick(account,tickId){
     if(err)throw err;
     if(result.length < 1){throw {rcode:codeMap.notFound,msg:'无法找到机票'}}
     tick = result[0];
+
     if(tick.tickState != field.tickState_create){throw {rcode:codeMap.customError,msg:'该机票不允许退款'}}
+    // 退款订单
+    [err,result] = await handle(db_user.refundTick(tickId))
+    if(err)throw err;
+    // 查看对应的订单状态
     [err,order] = await handle(orderInfo(account,tick.orderId))
     if(err)throw err;
     // 遍历查看订单是否为部分退款
@@ -521,6 +556,8 @@ async function changeOrderTravel(account,orderId,travelIds){
     }
 }
 
+
+
 module.exports = {
     register,
     changePhone,
@@ -541,6 +578,8 @@ module.exports = {
     chooseSit,
     payOrder,
     orderInfo,
+    refundTick,
+    refundOrder,
     changeOrderTravel
 }
 

+ 2 - 1
controller/c_flight.js

@@ -99,7 +99,7 @@ async function searchFlights(state,options,page,limie){
         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,
+        endTime:options.endTime,
         flightState: state,
         routeType: options.routeType,
         isLate: options.isLate,
@@ -286,6 +286,7 @@ async function updateAir(airId,updateParam){
     return result;
 }
 
+
 module.exports = {
     searchFlight,
     flightList,

+ 33 - 5
database/d_user.js

@@ -291,12 +291,13 @@ function tickInfo(tickId){
  * @param tickId
  * @param row
  * @param col
+ * @param cussTime
  * @returns {Promise | Promise<unknown>}
  */
-function tickChooseToSel(tickId,row,col){
+function tickChooseToSel(tickId,row,col,cussTime){
     let sql=``,values=[];
-    sql+=`update airTicket set \`row\` = ? , \`col\` = ? , \`tickState\` = ? where id =?`;
-    values.push(row,col,fields.tickState_seat,tickId);
+    sql+=`update airTicket set \`row\` = ? , \`col\` = ? ,\`cussTime\`=?, \`tickState\` = ?  where id =?`;
+    values.push(row,col,cussTime,fields.tickState_seat,tickId);
     return mysql.pq(sql,values);
 }
 
@@ -313,6 +314,7 @@ function flightTickSeat(flightId){
     return mysql.pq(sql,values);
 }
 
+// 查看该
 function findTickRowCol(flightId,row,col){
     let sql=``,values=[];
     sql+=`select t.* from airTicket as t ,orders as o
@@ -332,7 +334,7 @@ function tickSearch(params){
         if (!params[field]) {
             continue;
         }
-        if(values.length>0){sql+='and'}
+        if(values.length>0){sql+=' and'}
         sql+=` \`${field}\` = ?`
         values.push(params[field])
     }
@@ -364,6 +366,30 @@ function clearTick(orderId){
     return mysql.pq(sql,values);
 }
 
+/**
+ * 退票指定订单的所有票
+ * @param orderId
+ * @returns {Promise | Promise<unknown>}
+ */
+function refundOrderTick(orderId){
+    let sql=``,values=[];
+    sql+=`update airTicket set \`tickState\` = ?  where orderId =?`;
+    values.push(fields.tickState_refund,orderId);
+    return mysql.pq(sql,values);
+}
+
+/**
+ * 退票指定id
+ * @param tickId
+ * @returns {Promise | Promise<unknown>}
+ */
+function refundTick(tickId){
+    let sql=``,values=[];
+    sql+=`update airTicket set \`tickState\` = ?  where id =?`;
+    values.push(fields.tickState_refund,tickId);
+    return mysql.pq(sql,values);
+}
+
 function addOrder(userId,flightId,travelIds,createTime){
     let sql=``,values=[];
     sql+=`insert into orders(userId,flightId,ticketNum,travelIds,createTime) values(?,?,?,?,?)`;
@@ -499,5 +525,7 @@ module.exports =  {
     tickInfo,
     tickSearch,
     flightTickSeat,
-    tickChooseToSel
+    tickChooseToSel,
+    refundOrderTick,
+    refundTick
 }

+ 4 - 1
middleware/checkLogin.js

@@ -26,7 +26,9 @@ function checkLogin(accountType,type = 'json') {
             default:
                 field = progress.userSessionField;
         }
-        if (!req.session[field]) {
+        let tmpAccount = req.session[field];
+        req.session[field] = '';
+        if (!tmpAccount) {
             // 类型
             let resAction;
             switch (type) {
@@ -49,6 +51,7 @@ function checkLogin(accountType,type = 'json') {
             }
             return res[resAction.action](...resAction.params)
         }
+        req.session[field] = tmpAccount;
         next();
     }
 }

+ 2 - 1
routes/flight_api.js

@@ -5,7 +5,7 @@ const checkLogin = require('../middleware/checkLogin');
 const code = require('../maps/rcodeMap')
 const field = require('../maps/field')
 const c_area = require("../controller/c_area");
-
+const progress = require('../maps/progress')
 router.get('/list',async (req,res)=>{
     try{
         let results = await c_flight.flightList();
@@ -291,6 +291,7 @@ router.get('/seat',
         }
     })
 
+
 router.post('/air/add',
     checkLogin(field.adminType),
     paramsCheck({

+ 90 - 0
routes/userApi.js

@@ -5,6 +5,9 @@ const c_user = require("../controller/account");
 const code = require("../maps/rcodeMap");
 const  fields = require("../maps/field")
 const progress = require('../maps/progress')
+const field = require("../maps/field");
+const paramsCheck = require("../middleware/paramsCheck");
+const c_flight = require("../controller/c_flight");
 // 检查账户 是否存在
 router.get('/check',
     checkParams({
@@ -415,4 +418,91 @@ router.get(
         }
     }
 )
+
+router.post(
+    '/seat/choose',
+    checkLogin(field.userType),
+    paramsCheck({
+        post:{
+            seatId:{required:true},
+            col:{required:true},
+            row:{required:true},
+        }
+    }),
+    async (req,res)=>{
+        try{
+            let results = await c_user.chooseSit(
+                req.session[progress.userSessionField],
+                req.body.seatId,
+                req.body.row,
+                req.body.col);
+            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(
+    '/seat/refund',
+    checkLogin(field.userType),
+    paramsCheck({
+        post:{
+            tickId:{required:true},
+        }
+    }),
+    async (req,res)=>{
+        try{
+            let results = await c_user.refundTick(req.session[progress.userSessionField],req.body.tickId);
+            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(
+    '/order/refund',
+    checkLogin(field.userType),
+    paramsCheck({
+        post:{
+            orderId:{required:true},
+        }
+    }),
+    async (req,res)=>{
+        try{
+            let results = await c_user.refundOrder(req.session[progress.userSessionField],req.body.orderId);
+            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
+            });
+        }
+    }
+);
 module.exports = router;