From a4fdb7922a4a05a4f735f77c3f7b9c20c75c8d2f Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期四, 16 五月 2024 19:18:55 +0800
Subject: [PATCH] 接送机,录音修改,改派订单,接送机订单,人脸识别异常记录部分

---
 ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java                                    |   39 +
 ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderTransferMapper.java                         |   26 
 ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriverFacialFail.java                          |  128 ++++
 ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderTransferController.java |  229 +++++++
 ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar_orderDetail.html                |   11 
 ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTransfer/tOrderTransfer_trajectory.html                     |   52 +
 ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TDriverFacialFailMapper.java                      |   22 
 ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTransfer/tOrderTransfer_add.html                            |   89 ++
 ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderCrossCity/tOrderCrossCity_detail.html                       |   12 
 ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTransfer/tOrderTransfer.html                                |  101 +++
 ManagementNTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderTransfer/tOrderTransfer.js                                |  379 +++++++++++
 ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderTransferService.java                   |   30 
 ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar.html                            |   12 
 ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java                |    8 
 ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TDriverFacialFailMapper.xml               |   21 
 ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCrossCity.java                            |   22 
 ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverFacialFailServiceImpl.java        |   20 
 ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTransfer/tOrderTransfer_orderDetail.html                    |  136 ++++
 ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderTransferServiceImpl.java           |   12 
 ManagementNTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderTransfer/tOrderTransfer_info.js                           |  248 +++++++
 ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderTransferMapper.xml                  |   88 ++
 ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCharteredCar.java                         |    7 
 ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITDriverFacialFailService.java                |   16 
 ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderTransfer.java                             |   26 
 ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriverFacialFail/tDriverFacialFail.html                          |   45 +
 ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tCarModel/tCarModel.html                                          |   10 
 ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriverFacialFail/tDriverFacialFail_add.html                      |   38 +
 ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriverFacialFail/tDriverFacialFail_edit.html                     |   39 +
 ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderPrivateCar.java                           |   25 
 29 files changed, 1,870 insertions(+), 21 deletions(-)

diff --git a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderTransferController.java b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderTransferController.java
new file mode 100644
index 0000000..cec1a7e
--- /dev/null
+++ b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderTransferController.java
@@ -0,0 +1,229 @@
+package com.stylefeng.guns.modular.system.controller.specialTrain;
+
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.common.constant.factory.PageFactory;
+import com.stylefeng.guns.core.shiro.ShiroKit;
+import com.stylefeng.guns.core.util.SinataUtil;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.dao.OrderCancelMapper;
+import com.stylefeng.guns.modular.system.model.*;
+import com.stylefeng.guns.modular.system.service.ITDriverService;
+import com.stylefeng.guns.modular.system.service.ITOrderPositionService;
+import com.stylefeng.guns.modular.system.service.ITOrderTransferService;
+import com.stylefeng.guns.modular.system.service.ITServerCarmodelService;
+import com.stylefeng.guns.modular.system.util.HttpRequestUtil;
+import com.stylefeng.guns.modular.system.util.PushMinistryOfTransportUtil;
+import com.stylefeng.guns.modular.system.util.PushURL;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.util.*;
+
+/**
+ * 接送机订单控制器
+ *
+ * @author fengshuonan
+ * @Date 2020-09-02 17:28:59
+ */
+@Controller
+@RequestMapping("/tOrderTransfer")
+public class TOrderTransferController extends BaseController {
+
+    private String PREFIX = "/system/tOrderTransfer/";
+
+    @Autowired
+    private ITOrderTransferService tOrderTransferService;
+
+    @Autowired
+    private ITServerCarmodelService tServerCarmodelService;
+
+    @Autowired
+    private ITOrderPositionService tOrderPositionService;
+
+    @Autowired
+    private ITDriverService tDriverService;
+
+    @Autowired
+    private PushMinistryOfTransportUtil pushMinistryOfTransportUtil;
+
+    @Resource
+    private OrderCancelMapper orderCancelMapper;
+
+    @Value("${pushMinistryOfTransport}")
+    private boolean pushMinistryOfTransport;
+
+    @Value("${filePath}")
+    private String filePath;
+
+
+
+
+    /**
+     * 跳转到接送机订单首页
+     */
+    @RequestMapping("")
+    public String index(Model model) {
+        //服务接送机车型
+        List<TServerCarmodel> carmodelList = tServerCarmodelService.selectList(new EntityWrapper<TServerCarmodel>().eq("type", 1).eq("state", 1));
+        model.addAttribute("carmodelList",carmodelList);
+        return PREFIX + "tOrderTransfer.html";
+    }
+
+    /**
+     * 跳转到修改接送机订单
+     */
+    @RequestMapping("/tOrderTransfer_orderDetail/{tOrderTransferId}")
+    public String tOrderTransferUpdate(@PathVariable Integer tOrderTransferId, Model model) {
+        Map<String, Object> item = tOrderTransferService.getTransferOrderDetailById(tOrderTransferId);
+        model.addAttribute("item",item);
+        return PREFIX + "tOrderTransfer_orderDetail.html";
+    }
+
+    /**
+     * 跳转到出租车订单轨迹页面
+     */
+    @RequestMapping("/tOrderTransfer_trajectory/{tOrderTransferId}")
+    public String tOrderTaxi_trajectory(@PathVariable Integer tOrderTransferId, Model model) {
+        model.addAttribute("tOrderTransferId",tOrderTransferId);
+        return PREFIX + "tOrderTransfer_trajectory.html";
+    }
+
+    /**
+     * 获取接送机订单列表
+     */
+    @RequestMapping(value = "/list")
+    @ResponseBody
+    public Object list(String insertTime,
+                       String orderNum,
+                       Integer orderSource,
+                       String userName,
+                       String userPhone,
+                       String passengers,
+                       String passengersPhone,
+                       Integer serverCarModelId,
+                       String driver,
+                       Integer state) {
+        String beginTime = null;
+        String endTime = null;
+        if (SinataUtil.isNotEmpty(insertTime)){
+            String[] timeArray = insertTime.split(" - ");
+            beginTime = timeArray[0];
+            endTime = timeArray[1];
+        }
+        Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
+        page.setRecords(tOrderTransferService.getTransferOrderList(page,beginTime,endTime,ShiroKit.getUser().getRoleType(),ShiroKit.getUser().getObjectId(),orderNum,orderSource,userName,userPhone,passengers,passengersPhone,serverCarModelId,driver,state));
+        return super.packForBT(page);
+    }
+
+    private ResultUtil resultUtil;
+
+    /**
+     * 获取订单轨迹
+     * @param orderDetailId
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/getOrderTrack", method = RequestMethod.POST)
+    public ResultUtil getOrderTrack(String orderDetailId){
+        if(ToolUtil.isNotEmpty(orderDetailId)){
+            try {
+//                List<TOrderPosition> list = tOrderPositionService.selectList(new EntityWrapper<TOrderPosition>().eq("orderType", 1).eq("orderId", orderDetailId).orderBy("insertTime"));
+                /*if(list.size() == 0){
+                    return ResultUtil.error("该订单没有运行轨迹");
+                }*/
+                //将数据存储到文件中
+                File file = new File(filePath + orderDetailId + "_1.txt");
+                if(!file.exists()){
+                    return ResultUtil.success(new ArrayList<>());
+                }
+                //读取文件(字符流)
+                BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));
+                //循环取出数据
+                String str = null;
+                StringBuffer sb = new StringBuffer();
+                while ((str = in.readLine()) != null) {
+                    sb.append(str);
+                }
+                List<TOrderPosition> list = JSONArray.parseArray(sb.toString(), TOrderPosition.class);
+                resultUtil = ResultUtil.success(list);
+            }catch (Exception e){
+                e.printStackTrace();
+                resultUtil = ResultUtil.runErr();
+            }
+        }else {
+            resultUtil = ResultUtil.paranErr();
+        }
+        return resultUtil;
+    }
+
+    /**
+     * 取消接送机订单
+     */
+    @RequestMapping(value = "/cancel")
+    @ResponseBody
+    public Object cancel(@RequestParam Integer tOrderTransferId) {
+        TOrderTransfer tOrderTransfer = tOrderTransferService.selectById(tOrderTransferId);
+
+        //修改之前司机状态 -- 空闲
+        if(null != tOrderTransfer.getDriverId()){
+            TDriver driver = tDriverService.selectById(tOrderTransfer.getDriverId());
+            driver.setState(2);
+            tDriverService.updateById(driver);
+        }
+
+        tOrderTransfer.setState(10);
+        tOrderTransferService.updateById(tOrderTransfer);
+
+        OrderCancel orderCancel = new OrderCancel();
+        orderCancel.setOrderId(tOrderTransferId);
+        orderCancel.setOrderType(1);
+        orderCancel.setReason("平台取消订单");
+        orderCancel.setRemark("平台取消订单");
+        orderCancel.setUserType(2);
+        orderCancel.setState(2);
+        orderCancel.setInsertTime(new Date());
+        orderCancelMapper.insert(orderCancel);
+
+        //增加推送
+        Map<String,String> map = new HashMap<>();
+        map.put("id", tOrderTransfer.getId().toString());
+        map.put("orderType", "1");
+        String result = HttpRequestUtil.postRequest(PushURL.cancel_order_url, map);
+        System.out.println("接送机取消:【orderId="+tOrderTransfer.getId().toString()+"】,调用接口:"+result);
+
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                if(pushMinistryOfTransport){//上传数据
+                    pushMinistryOfTransportUtil.orderCancel(tOrderTransferId);
+                }
+            }
+        }).start();
+
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 删除接送机订单
+     */
+    @RequestMapping(value = "/delete")
+    @ResponseBody
+    public Object delete(@RequestParam Integer tOrderTransferId) {
+        TOrderTransfer tOrderTransfer = tOrderTransferService.selectById(tOrderTransferId);
+        tOrderTransfer.setIsDelete(2);
+        tOrderTransferService.updateById(tOrderTransfer);
+        return SUCCESS_TIP;
+    }
+}
diff --git a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
index b3f1d26..6a60dbb 100644
--- a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
+++ b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
@@ -125,10 +125,10 @@
             loginFailures.put(username, f);
         }
 
-        if(f > 5 && (System.currentTimeMillis() - t) <= (30 * 60 * 1000)){
-            model.addAttribute("tips", "登录次数过多,请等30分钟再试!");
-            return "/login.html";
-        }
+//        if(f > 5 && (System.currentTimeMillis() - t) <= (30 * 60 * 1000)){
+//            model.addAttribute("tips", "登录次数过多,请等30分钟再试!");
+//            return "/login.html";
+//        }
         //验证验证码是否正确
         if (KaptchaUtil.getKaptchaOnOff()) {
             String kaptcha = super.getPara("kaptcha").trim();
diff --git a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TDriverFacialFailMapper.java b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TDriverFacialFailMapper.java
new file mode 100644
index 0000000..b458103
--- /dev/null
+++ b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TDriverFacialFailMapper.java
@@ -0,0 +1,22 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.stylefeng.guns.modular.system.model.TCarModel;
+import com.stylefeng.guns.modular.system.model.TDriverFacialFail;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 人脸识别失败记录表 Mapper 接口
+ * </p>
+ *
+ * @author 吕雪
+ * @since 2020-06-05
+ */
+public interface TDriverFacialFailMapper extends BaseMapper<TDriverFacialFail> {
+
+}
diff --git a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderTransferMapper.java b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderTransferMapper.java
index c60ede1..7ad1e85 100644
--- a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderTransferMapper.java
+++ b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderTransferMapper.java
@@ -11,12 +11,36 @@
 
 /**
  * <p>
- * 订单-专车 Mapper 接口
+ * 订单-接送机 Mapper 接口
  * </p>
  *
  * @author 吕雪
  * @since 2020-09-02
  */
 public interface TOrderTransferMapper extends BaseMapper<TOrderTransfer> {
+    /**
+     * 根据条件查询专车订单列表
+     * @return
+     */
+    List<Map<String,Object>> getTransferOrderList(@Param("page") Page<Map<String, Object>> page,
+                                                    @Param("beginTime") String beginTime,
+                                                    @Param("endTime") String endTime,
+                                                    @Param("roleType") Integer roleType,
+                                                    @Param("nowUserId") Integer nowUserId,
+                                                    @Param("orderNum") String orderNum,
+                                                    @Param("orderSource") Integer orderSource,
+                                                    @Param("userName") String userName,
+                                                    @Param("userPhone") String userPhone,
+                                                    @Param("passengers") String passengers,
+                                                    @Param("passengersPhone") String passengersPhone,
+                                                    @Param("serverCarModelId") Integer serverCarModelId,
+                                                    @Param("driver") String driver,
+                                                    @Param("state") Integer state);
 
+    /**
+     * 根据专车订单ID获取专车订单详情
+     * @param orderId
+     * @return
+     */
+    Map<String,Object> getTransferOrderDetailById(@Param("orderId") Integer orderId);
 }
diff --git a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TDriverFacialFailMapper.xml b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TDriverFacialFailMapper.xml
new file mode 100644
index 0000000..74f84f9
--- /dev/null
+++ b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TDriverFacialFailMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.stylefeng.guns.modular.system.dao.TDriverFacialFailMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.TDriverFacialFail">
+        <id column="id" property="id" />
+        <result column="driverId" property="driverId" />
+        <result column="city" property="city" />
+        <result column="cityCode" property="cityCode" />
+        <result column="facialPicture" property="facialPicture" />
+        <result column="createTime" property="createTime" />
+        <result column="isDelete" property="isDelete" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, driverId, city, cityCode, facialPicture, createTime, isDelete
+    </sql>
+
+</mapper>
diff --git a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderTransferMapper.xml b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderTransferMapper.xml
index 53d9dc2..0b2b537 100644
--- a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderTransferMapper.xml
+++ b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderTransferMapper.xml
@@ -74,6 +74,94 @@
     <sql id="Base_Column_List">
         id, type, userId, driverId, carId, orderNum, placementLon, placementLat, placementAddress, startLon, startLat, endLon, startAddress, endLat, endAddress, boardingLon, boardingLat, boardingAddress, boardingTime, getoffLon, getoffLat, getoffAddress, getoffTime, mileage, payManner, payType, orderMoney, startMoney, mileageMoney, durationMoney, longDistanceMoney, parkMoney, roadTollMoney, redPacketMoney, couponMoney, redPacketId, couponId, discount, discountMoney, activityId, companyId, payMoney, substitute, passengers, passengersPhone, state, insertTime, travelTime, snatchOrderTime, setOutTime, arriveTime, startServiceTime, endServiceTime, orderType, orderSource, invoiceId, isReassign, reassignNotice, trackId, isDelete, oldState, telX, bindId, serverCarModelId
     </sql>
+    <!--根据条件查询专车订单列表-->
+    <select id="getTransferOrderList" resultType="map" parameterType="com.baomidou.mybatisplus.plugins.Page">
+        SELECT * FROM (SELECT ui.nickName as userName,ui.phone as userPhone,CONCAT(di.`name`,'-',di.phone) as driver,CONCAT(cb.`name`,'-',ci.carLicensePlate) as car,
+        sc.`name` as serverCarModel,ot.* FROM t_order_transfer as ot
+        LEFT JOIN t_user as ui on ui.id = ot.userId
+        LEFT JOIN t_driver as di on di.id = ot.driverId
+        LEFT JOIN t_car as ci on ci.id= ot.carId
+        LEFT JOIN t_car_brand as cb on cb.id = ci.carBrandId
+        LEFT JOIN t_server_carmodel as sc on sc.id = ot.serverCarModelId
+        ) as o
+        <where>
+            o.isDelete = 1 and o.type = 7
+            <if test="beginTime != null and beginTime != '' and endTime != null and endTime != ''">
+                AND (o.insertTime between CONCAT(#{beginTime},' 00:00:00') and CONCAT(#{endTime},' 23:59:59'))
+            </if>
+            <if test="orderNum != null and orderNum != ''">
+                and o.orderNum  LIKE CONCAT('%',#{orderNum},'%')
+            </if>
+            <if test="orderSource != null and orderSource != ''">
+                and o.orderSource = #{orderSource}
+            </if>
+            <if test="userName != null and userName != ''">
+                and o.userName  LIKE CONCAT('%',#{userName},'%')
+            </if>
+            <if test="userPhone != null and userPhone != ''">
+                and o.userPhone  LIKE CONCAT('%',#{userPhone},'%')
+            </if>
+            <if test="passengers != null and passengers != ''">
+                and o.passengers  LIKE CONCAT('%',#{passengers},'%')
+            </if>
+            <if test="passengersPhone != null and passengersPhone != ''">
+                and o.passengersPhone  LIKE CONCAT('%',#{passengersPhone},'%')
+            </if>
+            <if test="serverCarModelId != null and serverCarModelId != ''">
+                and o.serverCarModelId  = #{serverCarModelId}
+            </if>
+            <if test="driver != null and driver != ''">
+                and o.driver  LIKE CONCAT('%',#{driver},'%')
+            </if>
+            <if test="state != null and state != ''">
+                and o.state = #{state}
+            </if>
+            <if test="roleType != null and roleType != '' and roleType == 2">
+                and (o.companyId = #{nowUserId} or FIND_IN_SET(o.companyId,(SELECT GROUP_CONCAT(id) as ids FROM t_company where superiorId = #{nowUserId} GROUP BY superiorId)))
+            </if>
+            <if test="roleType != null and roleType != '' and roleType == 3">
+                and o.companyId = #{nowUserId}
+            </if>
+        </where>
+        order by o.id desc
+    </select>
 
+    <!--根据专车订单ID获取专车订单详情-->
+    <select id="getTransferOrderDetailById" resultType="map">
+        SELECT
+            DATE_FORMAT(ot.insertTime,'%Y-%m-%d %H:%i') as insertTimeStr,
+            DATE_FORMAT(ot.travelTime,'%Y-%m-%d %H:%i') as travelTimeStr,
+            DATE_FORMAT(ot.boardingTime,'%Y-%m-%d %H:%i') as boardingTimeStr,
+            DATE_FORMAT(ot.getoffTime,'%Y-%m-%d %H:%i') as getoffTimeStr,
+            case when ot.orderSource = 1 then 'APP下单'
+                 when ot.orderSource = 2 then '扫码下单'
+                 when ot.orderSource = 3 then '小程序下单'
+                 when ot.orderSource = 4 then '司机下单'
+                 when ot.orderSource = 5 then '调度下单' else '' end orderSourceStr,
+            ui.nickName as userName,ui.phone as userPhone,
+            case when ot.payType = 1 then '微信'
+                 when ot.payType = 2 then '支付宝'
+                 when ot.payType = 3 then '余额' else '' end as payTypeStr,
+            sc.`name` as serverCarModel,
+            case when income1.type = 1 then income1.money else 0 end as platIncome,
+            case when income1.type = 2 then income1.money else 0 end as companyIncome,
+            case when income1.type = 3 then income1.money else 0 end as franchiseeIncome,
+            IFNULL(income2.money,0) as driverIncome,
+            CONCAT(di.`name`,'-',di.phone) as driver,
+            CONCAT(cb.`name`,'-',ci.carLicensePlate) as car,
+            cc.`name` as companyName,ot.*
+        FROM t_order_transfer as ot
+                 LEFT JOIN t_user as ui on ui.id = ot.userId
+                 LEFT JOIN t_driver as di on di.id = ot.driverId
+                 LEFT JOIN t_car as ci on ci.id= ot.carId
+                 LEFT JOIN t_car_brand as cb on cb.id = ci.carBrandId
+                 LEFT JOIN t_company as cc on cc.id = ot.companyId
+                 LEFT JOIN t_server_carmodel as sc on sc.id = ot.serverCarModelId
+                 LEFT JOIN (SELECT ii.money,ii.incomeId,cc.type FROM t_income as ii
+                                                                         LEFT JOIN t_company as cc on ii.objectId = cc.id
+                            where ii.userType = 1 and ii.type = 2 and ii.orderType = 7 GROUP BY ii.incomeId) as income1 on income1.incomeId = ot.id
+                 LEFT JOIN (SELECT * FROM t_income where userType = 2 and type = 2 and orderType = 7 GROUP BY incomeId) as income2 on income2.incomeId = ot.id
+        where ot.id = #{orderId}
+    </select>
 
 </mapper>
diff --git a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java
index 211bdef..7b95fcf 100644
--- a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java
+++ b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java
@@ -277,6 +277,45 @@
      */
     private Integer addObjectId;
 
+    /**
+     * 人脸识别失败次数 5次进行下线
+     */
+    private Integer failCount;
+
+    /**
+     * 是否需要进行人脸识别 1=是 0=否
+     */
+    private Integer isNeedFacial;
+
+    /**
+     * 上次人脸识别时间
+     */
+    private Date lastFacialTime;
+
+    public Integer getFailCount() {
+        return failCount;
+    }
+
+    public void setFailCount(Integer failCount) {
+        this.failCount = failCount;
+    }
+
+    public Integer getIsNeedFacial() {
+        return isNeedFacial;
+    }
+
+    public void setIsNeedFacial(Integer isNeedFacial) {
+        this.isNeedFacial = isNeedFacial;
+    }
+
+    public Date getLastFacialTime() {
+        return lastFacialTime;
+    }
+
+    public void setLastFacialTime(Date lastFacialTime) {
+        this.lastFacialTime = lastFacialTime;
+    }
+
     public BigDecimal getBalance() {
         return balance;
     }
diff --git a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriverFacialFail.java b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriverFacialFail.java
new file mode 100644
index 0000000..43db96f
--- /dev/null
+++ b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriverFacialFail.java
@@ -0,0 +1,128 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 司机人脸识别失败记录
+ * </p>
+ *
+ * @author 吕雪
+ * @since 2020-06-05
+ */
+@TableName("t_driver_facial_fail")
+public class TDriverFacialFail extends Model<TDriverFacialFail> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 司机id
+     */
+    private Integer driverId;
+
+    /**
+     * 所属城市
+     */
+    private String city;
+    /**
+     * 城市code
+     */
+    private String cityCode;
+    /**
+     * 识别失败图片
+     */
+    private String facialPicture;
+    /**
+     * 识别时间
+     */
+    private String createTime;
+    /**
+     * 是否删除  1=否 2=是
+     */
+    private String isDelete;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getDriverId() {
+        return driverId;
+    }
+
+    public void setDriverId(Integer driverId) {
+        this.driverId = driverId;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getCityCode() {
+        return cityCode;
+    }
+
+    public void setCityCode(String cityCode) {
+        this.cityCode = cityCode;
+    }
+
+    public String getFacialPicture() {
+        return facialPicture;
+    }
+
+    public void setFacialPicture(String facialPicture) {
+        this.facialPicture = facialPicture;
+    }
+
+    public String getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(String createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getIsDelete() {
+        return isDelete;
+    }
+
+    public void setIsDelete(String isDelete) {
+        this.isDelete = isDelete;
+    }
+
+    @Override
+    public String toString() {
+        return "TDriverFacialFail{" +
+                "id=" + id +
+                ", driverId=" + driverId +
+                ", city='" + city + '\'' +
+                ", cityCode='" + cityCode + '\'' +
+                ", facialPicture='" + facialPicture + '\'' +
+                ", createTime='" + createTime + '\'' +
+                ", isDelete='" + isDelete + '\'' +
+                '}';
+    }
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+}
diff --git a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCharteredCar.java b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCharteredCar.java
index 2ff78a0..28d2628 100644
--- a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCharteredCar.java
+++ b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCharteredCar.java
@@ -1,5 +1,6 @@
 package com.stylefeng.guns.modular.system.model;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import com.baomidou.mybatisplus.activerecord.Model;
 import com.baomidou.mybatisplus.annotations.TableName;
@@ -38,7 +39,7 @@
     /**
      * 用车时长(天)
      */
-    private Integer carTime;
+    private BigDecimal carTime;
     /**
      * 服务车型id
      */
@@ -117,11 +118,11 @@
         this.traveltime = traveltime;
     }
 
-    public Integer getCarTime() {
+    public BigDecimal getCarTime() {
         return carTime;
     }
 
-    public void setCarTime(Integer carTime) {
+    public void setCarTime(BigDecimal carTime) {
         this.carTime = carTime;
     }
 
diff --git a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCrossCity.java b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCrossCity.java
index 6780793..06a0544 100644
--- a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCrossCity.java
+++ b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCrossCity.java
@@ -266,7 +266,29 @@
      * 移动小号绑定关系id
      */
     private String bindId;
+    /**
+     * 行程录音
+     */
+    private String routeRecord;
+    /**
+     * 录音时间
+     */
+    private Date recordTime;
 
+    public Date getRecordTime() {
+        return recordTime;
+    }
+
+    public void setRecordTime(Date recordTime) {
+        this.recordTime = recordTime;
+    }
+    public String getRouteRecord() {
+        return routeRecord;
+    }
+
+    public void setRouteRecord(String routeRecord) {
+        this.routeRecord = routeRecord;
+    }
     public Integer getOldState() {
         return oldState;
     }
diff --git a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderPrivateCar.java b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderPrivateCar.java
index 205edda..81a0222 100644
--- a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderPrivateCar.java
+++ b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderPrivateCar.java
@@ -279,6 +279,29 @@
      */
     private Integer serverCarModelId;
 
+    /**
+     * 行程录音
+     */
+    private String routeRecord;
+    /**
+     * 录音时间
+     */
+    private Date recordTime;
+
+    public Date getRecordTime() {
+        return recordTime;
+    }
+
+    public void setRecordTime(Date recordTime) {
+        this.recordTime = recordTime;
+    }
+    public String getRouteRecord() {
+        return routeRecord;
+    }
+
+    public void setRouteRecord(String routeRecord) {
+        this.routeRecord = routeRecord;
+    }
 
     public Integer getId() {
         return id;
@@ -799,7 +822,7 @@
 
     @Override
     public String toString() {
-        return "TOrderPrivateCar{" +
+        return "TOrderTransfer{" +
         "id=" + id +
         ", type=" + type +
         ", userId=" + userId +
diff --git a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderTransfer.java b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderTransfer.java
index eea4f1f..0c052e0 100644
--- a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderTransfer.java
+++ b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderTransfer.java
@@ -279,7 +279,31 @@
      * 专车车型ID  关联t_server_carmodel表
      */
     private Integer serverCarModelId;
+    /**
+     * 行程录音
+     */
+    private String routeRecord;
 
+    /**
+     * 录音时间
+     */
+    private Date recordTime;
+
+    public Date getRecordTime() {
+        return recordTime;
+    }
+
+    public void setRecordTime(Date recordTime) {
+        this.recordTime = recordTime;
+    }
+
+    public String getRouteRecord() {
+        return routeRecord;
+    }
+
+    public void setRouteRecord(String routeRecord) {
+        this.routeRecord = routeRecord;
+    }
 
     public Integer getId() {
         return id;
@@ -800,7 +824,7 @@
 
     @Override
     public String toString() {
-        return "TOrderPrivateCar{" +
+        return "TOrderTransfer{" +
         "id=" + id +
         ", type=" + type +
         ", userId=" + userId +
diff --git a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITDriverFacialFailService.java b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITDriverFacialFailService.java
new file mode 100644
index 0000000..871eaa4
--- /dev/null
+++ b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITDriverFacialFailService.java
@@ -0,0 +1,16 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.TDriverFacialFail;
+
+/**
+ * <p>
+ * 人脸识别失败记录表 服务类
+ * </p>
+ *
+ * @author 吕雪
+ * @since 2020-06-05
+ */
+public interface ITDriverFacialFailService extends IService<TDriverFacialFail> {
+
+}
diff --git a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderTransferService.java b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderTransferService.java
index d7d9d13..b5b7759 100644
--- a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderTransferService.java
+++ b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderTransferService.java
@@ -1,8 +1,13 @@
 package com.stylefeng.guns.modular.system.service;
 
+import com.baomidou.mybatisplus.plugins.Page;
 import com.baomidou.mybatisplus.service.IService;
 import com.stylefeng.guns.modular.system.model.TOrderPrivateCar;
 import com.stylefeng.guns.modular.system.model.TOrderTransfer;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -14,4 +19,29 @@
  */
 public interface ITOrderTransferService extends IService<TOrderTransfer> {
 
+    /**
+     * 根据条件查询专车订单列表
+     * @return
+     */
+    List<Map<String,Object>> getTransferOrderList(@Param("page") Page<Map<String, Object>> page,
+                                                    @Param("beginTime") String beginTime,
+                                                    @Param("endTime") String endTime,
+                                                    @Param("roleType") Integer roleType,
+                                                    @Param("nowUserId") Integer nowUserId,
+                                                    @Param("orderNum") String orderNum,
+                                                    @Param("orderSource") Integer orderSource,
+                                                    @Param("userName") String userName,
+                                                    @Param("userPhone") String userPhone,
+                                                    @Param("passengers") String passengers,
+                                                    @Param("passengersPhone") String passengersPhone,
+                                                    @Param("serverCarModelId") Integer serverCarModelId,
+                                                    @Param("driver") String driver,
+                                                    @Param("state") Integer state);
+
+    /**
+     * 根据专车订单ID获取专车订单详情
+     * @param orderId
+     * @return
+     */
+    Map<String,Object> getTransferOrderDetailById(@Param("orderId") Integer orderId);
 }
diff --git a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverFacialFailServiceImpl.java b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverFacialFailServiceImpl.java
new file mode 100644
index 0000000..37710c4
--- /dev/null
+++ b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverFacialFailServiceImpl.java
@@ -0,0 +1,20 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.TDriverFacialFailMapper;
+import com.stylefeng.guns.modular.system.model.TDriverFacialFail;
+import com.stylefeng.guns.modular.system.service.ITDriverFacialFailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 人脸识别失败记录表 服务实现类
+ * </p>
+ *
+ * @author 吕雪
+ * @since 2020-06-05
+ */
+@Service
+public class TDriverFacialFailServiceImpl extends ServiceImpl<TDriverFacialFailMapper, TDriverFacialFail> implements ITDriverFacialFailService {
+
+}
diff --git a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderTransferServiceImpl.java b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderTransferServiceImpl.java
index 95208cc..d9e4ec5 100644
--- a/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderTransferServiceImpl.java
+++ b/ManagementNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderTransferServiceImpl.java
@@ -1,10 +1,14 @@
 package com.stylefeng.guns.modular.system.service.impl;
 
+import com.baomidou.mybatisplus.plugins.Page;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.stylefeng.guns.modular.system.dao.TOrderTransferMapper;
 import com.stylefeng.guns.modular.system.model.TOrderTransfer;
 import com.stylefeng.guns.modular.system.service.ITOrderTransferService;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -16,5 +20,13 @@
  */
 @Service
 public class TOrderTransferServiceImpl extends ServiceImpl<TOrderTransferMapper, TOrderTransfer> implements ITOrderTransferService {
+    @Override
+    public List<Map<String, Object>> getTransferOrderList(Page<Map<String, Object>> page, String beginTime, String endTime, Integer roleType, Integer nowUserId, String orderNum, Integer orderSource, String userName, String userPhone, String passengers, String passengersPhone, Integer serverCarModelId, String driver, Integer state) {
+        return this.baseMapper.getTransferOrderList(page, beginTime, endTime, roleType, nowUserId, orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state);
+    }
 
+    @Override
+    public Map<String, Object> getTransferOrderDetailById(Integer orderId) {
+        return this.baseMapper.getTransferOrderDetailById(orderId);
+    }
 }
diff --git a/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tCarModel/tCarModel.html b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tCarModel/tCarModel.html
index 5baa5d7..4158d58 100644
--- a/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tCarModel/tCarModel.html
+++ b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tCarModel/tCarModel.html
@@ -16,19 +16,19 @@
                                 <#NameCon id="name" name="名称" />
                             </div>
                             <div class="col-sm-3">
-                                <#button name="搜索" icon="fa-search" clickFun="TCharteredService.search()"/>
-                                <#button name="重置" icon="fa-trash" clickFun="TCharteredService.resetSearch()" space="true"/>
+                                <#button name="搜索" icon="fa-search" clickFun="TCarModel.search()"/>
+                                <#button name="重置" icon="fa-trash" clickFun="TCarModel.resetSearch()" space="true"/>
                             </div>
                         </div>
                         <div class="hidden-xs" id="TCarModelTableToolbar" role="group">
                             @if(shiro.hasPermission("/tCarModel/add")){
-                                <#button name="添加" icon="fa-plus" clickFun="TCharteredService.openAddTCarModel()"/>
+                                <#button name="添加" icon="fa-plus" clickFun="TCarModel.openAddTCarModel()"/>
                             @}
                             @if(shiro.hasPermission("/tCarModel/update")){
-                                <#button name="编辑" icon="fa-edit" clickFun="TCharteredService.openTCarModelDetail()" space="true"/>
+                                <#button name="编辑" icon="fa-edit" clickFun="TCarModel.openTCarModelDetail()" space="true"/>
                             @}
                             @if(shiro.hasPermission("/tCarModel/delete")){
-                                <#button name="删除" icon="fa-remove" clickFun="TCharteredService.delete()" space="true"/>
+                                <#button name="删除" icon="fa-remove" clickFun="TCarModel.delete()" space="true"/>
                             @}
                         </div>
                         <#table id="TCarModelTable"/>
diff --git a/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriverFacialFail/tDriverFacialFail.html b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriverFacialFail/tDriverFacialFail.html
new file mode 100644
index 0000000..1030241
--- /dev/null
+++ b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriverFacialFail/tDriverFacialFail.html
@@ -0,0 +1,45 @@
+@layout("/common/_container.html"){
+<div class="row">
+    <div class="col-sm-12">
+        <div class="ibox float-e-margins">
+            <div class="ibox-title">
+                <h5>车辆类型管理</h5>
+            </div>
+            <div class="ibox-content">
+                <div class="row row-lg">
+                    <div class="col-sm-12">
+                        <div class="row">
+                            <div class="col-sm-3">
+                                <#TimeCon id="createTime" name="添加时间" isTime="false"/>
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="phone" name="手机号"/>
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="name" name="名称" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#button name="搜索" icon="fa-search" clickFun="TDriverFacialFail.search()"/>
+                                <#button name="重置" icon="fa-trash" clickFun="TDriverFacialFail.resetSearch()" space="true"/>
+                            </div>
+                        </div>
+                        <div class="hidden-xs" id="TDriverFacialFailTableToolbar" role="group">
+                            @if(shiro.hasPermission("/tDriverFacialFail/deleteBatch")){
+                                <#button name="批量删除" icon="fa-remove" clickFun="TDriverFacialFail.deleteBatch()" space="true"/>
+                            @}
+                        </div>
+                        <#table id="TDriverFacialFailTable"/>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tDriverFacialFail/tDriverFacialFail.js"></script>
+<script>
+    laydate.render({
+        elem: '#createTime'
+        ,range: true
+    });
+</script>
+@}
diff --git a/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriverFacialFail/tDriverFacialFail_add.html b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriverFacialFail/tDriverFacialFail_add.html
new file mode 100644
index 0000000..5866855
--- /dev/null
+++ b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriverFacialFail/tDriverFacialFail_add.html
@@ -0,0 +1,38 @@
+@layout("/common/_container.html"){
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal" id="driverFacialFailInfoForm">
+            <div class="row">
+                <div class="col-sm-11">
+                    <#input id="name" name="类型名称" />
+                    <#select id="seat" name="座位数:">
+                        <option value="5">5座</option>
+                        <option value="7">7座</option>
+                    </#select>
+                    <#select id="brandId" name="所属车辆品牌:" >
+                        <option value="">选择所属车辆品牌</option>
+                        @for(obj in brandList){
+                        <option value="${obj.id}">${obj.name}</option>
+                        @}
+                    </#select>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">备注:</label>
+                        <div class="col-sm-9">
+                            <textarea type="text/plain" class="form-control" name="remark" id="remark" style="width:100%;height:150px;"></textarea>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div class="row btn-group-m-t">
+                <div class="col-sm-10 col-sm-offset-5">
+                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TDriverFacialFailInfoDlg.addSubmit()"/>
+                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TDriverFacialFailInfoDlg.close()"/>
+                </div>
+            </div>
+        </div>
+
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tDriverFacialFail/tDriverFacialFail_info.js"></script>
+@}
diff --git a/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriverFacialFail/tDriverFacialFail_edit.html b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriverFacialFail/tDriverFacialFail_edit.html
new file mode 100644
index 0000000..4ed26f3
--- /dev/null
+++ b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriverFacialFail/tDriverFacialFail_edit.html
@@ -0,0 +1,39 @@
+@layout("/common/_container.html"){
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal" id="driverFacialFailInfoForm">
+            <input type="hidden" id="id" name="id" value="${item.id}">
+            <div class="row">
+                <div class="col-sm-11">
+                    <#input id="name" name="类型名称" value="${item.name}"/>
+                    <#select id="seat" name="座位数:">
+                        <option value="5" ${5 == item.seat ? 'selected=selected' : ''}>5座</option>
+                        <option value="7" ${7 == item.seat ? 'selected=selected' : ''}>7座</option>
+                    </#select>
+                    <#select id="brandId" name="所属车辆品牌:" >
+                        <option value="">选择所属车辆品牌</option>
+                        @for(obj in brandList){
+                        <option value="${obj.id}" ${obj.id == item.brandId ? 'selected=selected' : ''}>${obj.name}</option>
+                        @}
+                    </#select>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">备注:</label>
+                        <div class="col-sm-9">
+                            <textarea type="text/plain" class="form-control" name="remark" id="remark" style="width:100%;height:150px;">${item.remark}</textarea>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div class="row btn-group-m-t">
+                <div class="col-sm-10 col-sm-offset-5">
+                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TDriverFacialFailInfoDlg.editSubmit()"/>
+                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TDriverFacialFailInfoDlg.close()"/>
+                </div>
+            </div>
+        </div>
+
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tDriverFacialFail/tDriverFacialFail_info.js"></script>
+@}
diff --git a/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderCrossCity/tOrderCrossCity_detail.html b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderCrossCity/tOrderCrossCity_detail.html
index 891f774..aaa036f 100644
--- a/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderCrossCity/tOrderCrossCity_detail.html
+++ b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderCrossCity/tOrderCrossCity_detail.html
@@ -120,6 +120,18 @@
                     </div>
                 </div>
             </div>
+
+            <div class="row" style="margin-top: 30px;">
+                <div class="col-sm-1">
+                    <h2 class="h3Class" style="font-weight: 700;">行程录音</h2>
+                </div>
+                <div class="col-sm-10">
+                    <audio id="audio" src="http://www.w3capi.com/upload/audio/audio_example.mp3" controls muted data-enabled="false">
+                        <!--                    <source src="${item.routeRecord}" type="audio/mpeg">-->
+                    </audio>
+                </div>
+            </div>
+
         </div>
 
     </div>
diff --git a/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar.html b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar.html
index 1ff3203..d4af45c 100644
--- a/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar.html
+++ b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar.html
@@ -66,22 +66,22 @@
                                 </#SelectCon>
                             </div>
                             <div class="col-sm-3">
-                                <#button name="搜索" icon="fa-search" clickFun="TOrderPrivateCar.search()"/>
-                                <#button name="重置" icon="fa-trash" clickFun="TOrderPrivateCar.resetSearch()" space="true"/>
+                                <#button name="搜索" icon="fa-search" clickFun="TOrderTransfer.search()"/>
+                                <#button name="重置" icon="fa-trash" clickFun="TOrderTransfer.resetSearch()" space="true"/>
                             </div>
                         </div>
                         <div class="hidden-xs" id="TOrderPrivateCarTableToolbar" role="group">
                             @if(shiro.hasPermission("/tOrderPrivateCar/orderDetail")){
-                                <#button name="订单详情" icon="fa-plus" clickFun="TOrderPrivateCar.orderDetail()"/>
+                                <#button name="订单详情" icon="fa-plus" clickFun="TOrderTransfer.orderDetail()"/>
                             @}
                             @if(shiro.hasPermission("/tOrderPrivateCar/cancelOrder")){
-                                <#button name="取消订单" icon="fa-edit" clickFun="TOrderPrivateCar.cancelOrder()" space="true"/>
+                                <#button name="取消订单" icon="fa-edit" clickFun="TOrderTransfer.cancelOrder()" space="true"/>
                             @}
                             @if(shiro.hasPermission("/tOrderPrivateCar/orderTrack")){
-                                <#button name="订单轨迹" icon="fa-edit" clickFun="TOrderPrivateCar.trajectory()" space="true"/>
+                                <#button name="订单轨迹" icon="fa-edit" clickFun="TOrderTransfer.trajectory()" space="true"/>
                             @}
                             @if(shiro.hasPermission("/tOrderPrivateCar/deleteOrder")){
-                                <#button name="删除记录" icon="fa-remove" clickFun="TOrderPrivateCar.deleteOrder()" space="true"/>
+                                <#button name="删除记录" icon="fa-remove" clickFun="TOrderTransfer.deleteOrder()" space="true"/>
                             @}
                         </div>
                         <#table id="TOrderPrivateCarTable"/>
diff --git a/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar_orderDetail.html b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar_orderDetail.html
index f5acceb..9ec61d7 100644
--- a/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar_orderDetail.html
+++ b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar_orderDetail.html
@@ -105,6 +105,17 @@
                 </div>
             </div>
 
+            <div class="row" style="margin-top: 30px;">
+                <div class="col-sm-1">
+                    <h2 class="h3Class" style="font-weight: 700;">行程录音</h2>
+                </div>
+                <div class="col-sm-10">
+                    <audio id="audio" src="http://www.w3capi.com/upload/audio/audio_example.mp3" controls muted data-enabled="false">
+                        <!--                    <source src="${item.routeRecord}" type="audio/mpeg">-->
+                    </audio>
+                </div>
+            </div>
+
         </div>
     </div>
 </div>
diff --git a/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTransfer/tOrderTransfer.html b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTransfer/tOrderTransfer.html
new file mode 100644
index 0000000..e56965b
--- /dev/null
+++ b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTransfer/tOrderTransfer.html
@@ -0,0 +1,101 @@
+@layout("/common/_container.html"){
+<div class="row">
+    <div class="col-sm-12">
+        <div class="ibox float-e-margins">
+            <div class="ibox-title">
+                <h5>接送机订单管理</h5>
+            </div>
+            <div class="ibox-content">
+                <div class="row row-lg">
+                    <div class="col-sm-12">
+                        <div class="row">
+                            <div class="col-sm-3">
+                                <#TimeCon id="insertTime" name="订单时间" isTime="false"/>
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="orderNum" name="订单编号" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#SelectCon id="orderSource" name="订单来源" >
+                                    <option value="">全部</option>
+                                    <option value="1">APP下单</option>
+                                    <option value="2">扫码下单</option>
+                                    <option value="3">小程序下单</option>
+                                    <option value="4">司机下单</option>
+                                    <option value="5">调度下单</option>
+                                </#SelectCon>
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="userName" name="下单用户昵称" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="userPhone" name="下单用户手机" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="passengers" name="乘车用户姓名" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="passengersPhone" name="乘车用户手机" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#SelectCon id="serverCarModelId" name="车型" >
+                                    <option value="">全部</option>
+                                    @for(obj in carmodelList){
+                                    <option value="${obj.id}">${obj.name}</option>
+                                    @}
+                                </#SelectCon>
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="driver" name="接单司机" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#SelectCon id="state" name="状态" >
+                                    <option value="">全部</option>
+                                    <option value="1">待接单</option>
+                                    <option value="2">待出发</option>
+                                    <option value="3">待到达预约地点</option>
+                                    <option value="4">待乘客上车</option>
+                                    <option value="5">服务中</option>
+                                    <option value="6">完成服务</option>
+                                    <option value="7">待支付</option>
+                                    <option value="8">待评价</option>
+                                    <option value="9">已完成</option>
+                                    <option value="10">已取消</option>
+                                    <option value="11">改派中</option>
+                                    <option value="12">取消待支付</option>
+                                </#SelectCon>
+                            </div>
+                            <div class="col-sm-3">
+                                <#button name="搜索" icon="fa-search" clickFun="TOrderTransfer.search()"/>
+                                <#button name="重置" icon="fa-trash" clickFun="TOrderTransfer.resetSearch()" space="true"/>
+                            </div>
+                        </div>
+                        <div class="hidden-xs" id="TOrderTransferTableToolbar" role="group">
+                            @if(shiro.hasPermission("/tOrderTransfer/orderDetail")){
+                                <#button name="订单详情" icon="fa-plus" clickFun="TOrderTransfer.orderDetail()"/>
+                            @}
+                            @if(shiro.hasPermission("/tOrderTransfer/cancelOrder")){
+                                <#button name="取消订单" icon="fa-edit" clickFun="TOrderTransfer.cancelOrder()" space="true"/>
+                            @}
+                            @if(shiro.hasPermission("/tOrderTransfer/orderTrack")){
+                                <#button name="订单轨迹" icon="fa-edit" clickFun="TOrderTransfer.trajectory()" space="true"/>
+                            @}
+                            @if(shiro.hasPermission("/tOrderTransfer/deleteOrder")){
+                                <#button name="删除记录" icon="fa-remove" clickFun="TOrderTransfer.deleteOrder()" space="true"/>
+                            @}
+                        </div>
+                        <#table id="TOrderTransferTable"/>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tOrderTransfer/tOrderTransfer.js"></script>
+<script>
+    laydate.render({
+        elem: '#insertTime'
+        ,range: true
+    });
+</script>
+@}
diff --git a/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTransfer/tOrderTransfer_add.html b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTransfer/tOrderTransfer_add.html
new file mode 100644
index 0000000..25a08ee
--- /dev/null
+++ b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTransfer/tOrderTransfer_add.html
@@ -0,0 +1,89 @@
+@layout("/common/_container.html"){
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal">
+
+            <div class="row">
+                <div class="col-sm-6 b-r">
+                            <#input id="id" name="主键id" underline="true"/>
+                            <#input id="type" name="类型(1=普通订单,2=摆渡订单)" underline="true"/>
+                            <#input id="userId" name="用户id" underline="true"/>
+                            <#input id="driverId" name="接单司机ID" underline="true"/>
+                            <#input id="carId" name="车辆id" underline="true"/>
+                            <#input id="orderNum" name="订单号" underline="true"/>
+                            <#input id="placementLon" name="下单地点经度" underline="true"/>
+                            <#input id="placementLat" name="下单地点纬度" underline="true"/>
+                            <#input id="placementAddress" name="下单地点" underline="true"/>
+                            <#input id="startLon" name="出发地经度值" underline="true"/>
+                            <#input id="startLat" name="出发地纬度值" underline="true"/>
+                            <#input id="endLon" name="目的地经度" underline="true"/>
+                            <#input id="startAddress" name="出发地地点" underline="true"/>
+                            <#input id="endLat" name="目的地纬度" underline="true"/>
+                            <#input id="endAddress" name="目的地地点" underline="true"/>
+                            <#input id="boardingLon" name="上车点经度" underline="true"/>
+                            <#input id="boardingLat" name="上车点纬度" underline="true"/>
+                            <#input id="boardingAddress" name="上车点" underline="true"/>
+                            <#input id="boardingTime" name="上车时间" underline="true"/>
+                            <#input id="getoffLon" name="下车点经度" underline="true"/>
+                            <#input id="getoffLat" name="下车点纬度" underline="true"/>
+                            <#input id="getoffAddress" name="下车地点" underline="true"/>
+                            <#input id="getoffTime" name="下车时间" underline="true"/>
+                            <#input id="mileage" name="行驶里程数(米)" underline="true"/>
+                            <#input id="payManner" name="支付方式(1=未来平台支付,2=其他方式支付)" underline="true"/>
+                            <#input id="payType" name="支付方式(1=微信,2=支付宝,3=其他)" underline="true"/>
+                            <#input id="orderMoney" name="订单金额" underline="true"/>
+                            <#input id="startMoney" name="起步价" underline="true"/>
+                            <#input id="mileageMoney" name="里程费" underline="true"/>
+                            <#input id="durationMoney" name="时长费" underline="true"/>
+                            <#input id="longDistanceMoney" name="远途费" underline="true"/>
+                            <#input id="parkMoney" name="停车费"/>
+                </div>
+
+                <div class="col-sm-6">
+                            <#input id="roadTollMoney" name="过路费" underline="true"/>
+                            <#input id="redPacketMoney" name="红包抵扣金额" underline="true"/>
+                            <#input id="couponMoney" name="优惠券抵扣金额" underline="true"/>
+                            <#input id="redPacketId" name="红包记录id" underline="true"/>
+                            <#input id="couponId" name="优惠券id" underline="true"/>
+                            <#input id="discount" name="折扣" underline="true"/>
+                            <#input id="discountMoney" name="折扣优惠金额" underline="true"/>
+                            <#input id="activityId" name="折扣活动id" underline="true"/>
+                            <#input id="companyId" name="公司id" underline="true"/>
+                            <#input id="payMoney" name="支付金额" underline="true"/>
+                            <#input id="substitute" name="是否是代下单(0:否,1:是)" underline="true"/>
+                            <#input id="passengers" name="乘车人" underline="true"/>
+                            <#input id="passengersPhone" name="乘车人电话" underline="true"/>
+                            <#input id="state" name="状态(1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付)" underline="true"/>
+                            <#input id="insertTime" name="下单时间" underline="true"/>
+                            <#input id="travelTime" name="出行时间" underline="true"/>
+                            <#input id="snatchOrderTime" name="抢单时间" underline="true"/>
+                            <#input id="setOutTime" name="司机点出发时间" underline="true"/>
+                            <#input id="arriveTime" name="司机到达预约地点时间" underline="true"/>
+                            <#input id="startServiceTime" name="开始服务时间" underline="true"/>
+                            <#input id="endServiceTime" name="结束服务时间" underline="true"/>
+                            <#input id="orderType" name="订单类型(1=普通,2=预约)" underline="true"/>
+                            <#input id="orderSource" name="下单方式(1:APP下单,2:扫码下单,3:小程序下单,4:司机下单,5:调度下单)" underline="true"/>
+                            <#input id="invoiceId" name="发票id" underline="true"/>
+                            <#input id="isReassign" name="是否是改派单(1=否,2=是)" underline="true"/>
+                            <#input id="reassignNotice" name="改派通知(0=没有改派,1=改派中,2=已改派)" underline="true"/>
+                            <#input id="trackId" name="高德猎鹰上的轨迹id" underline="true"/>
+                            <#input id="isDelete" name="是否删除  1=否 2=是" underline="true"/>
+                            <#input id="oldState" name="状态(改派前订单状态)" underline="true"/>
+                            <#input id="telX" name="移动小号" underline="true"/>
+                            <#input id="bindId" name="移动小号绑定关系id" underline="true"/>
+                            <#input id="serverCarModelId" name="接送机车型ID  关联t_server_carmodel表" underline="true"/>
+                </div>
+            </div>
+
+            <div class="row btn-group-m-t">
+                <div class="col-sm-10">
+                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TOrderTransferInfoDlg.addSubmit()"/>
+                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TOrderTransferInfoDlg.close()"/>
+                </div>
+            </div>
+        </div>
+
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tOrderTransfer/tOrderTransfer_info.js"></script>
+@}
diff --git a/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTransfer/tOrderTransfer_orderDetail.html b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTransfer/tOrderTransfer_orderDetail.html
new file mode 100644
index 0000000..13110b2
--- /dev/null
+++ b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTransfer/tOrderTransfer_orderDetail.html
@@ -0,0 +1,136 @@
+@layout("/common/_container.html"){
+<style type="text/css">
+    html, body, #container {
+        height: 100%;
+        width: 100%;
+    }
+
+    .input-card .btn{
+        margin-right: 1.2rem;
+        width: 9rem;
+    }
+
+    .input-card .btn:last-child{
+        margin-right: 0;
+    }
+</style>
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal">
+            <input type="hidden" id="id" name="id" value="${item.id}">
+            <div class="row" style="margin-top: 30px;">
+                <div class="col-sm-4">
+                    <h2 class="h3Class" style="font-weight: 700;">订单详情</h2>
+                </div>
+            </div>
+            <div class="row">
+                <div class="col-sm-6 b-r">
+                    <#label id="insertTimeStr" name="下单时间" value="${item.insertTimeStr}"/>
+                    <#label id="orderSourceStr" name="订单来源" value="${item.orderSourceStr}"/>
+                    <#label id="userName" name="下单用户昵称" value="${item.userName}"/>
+                    <#label id="passengers" name="乘车用户昵称" value="${item.passengers}"/>
+                    <#label id="placementAddress" name="起点" value="${item.startAddress}"/>
+                    <#label id="serverCarModel" name="选择车型" value="${item.serverCarModel}"/>
+                    <#label id="car" name="接单车辆" value="${item.car}"/>
+                    <#label id="boardingAddress" name="上车地点" value="${item.boardingAddress}"/>
+                    <#label id="getoffAddress" name="下车地点" value="${item.getoffAddress}"/>
+                </div>
+
+                <div class="col-sm-6">
+                    <#label id="orderNum" name="订单编号" value="${item.orderNum}"/>
+                    <#label id="travelTimeStr" name="乘车时间" value="${item.travelTimeStr}"/>
+                    <#label id="userPhone" name="下单用户手机号" value="${item.userPhone}"/>
+                    <#label id="passengersPhone" name="乘车用户手机号" value="${item.passengersPhone}"/>
+                    <#label id="endAddress" name="终点" value="${item.endAddress}"/>
+                    <#label id="driver" name="接单司机" value="${item.driver}"/>
+                    <#label id="companyName" name="车辆所属机构" value="${item.companyName}"/>
+                    <#label id="boardingTimeStr" name="上车时间" value="${item.boardingTimeStr}"/>
+                    <#label id="getoffTimeStr" name="下车时间" value="${item.getoffTimeStr}"/>
+                </div>
+            </div>
+            <div class="row" style="margin-top: 30px;">
+                <div class="col-sm-4">
+                    <h2 class="h3Class" style="font-weight: 700;">费用明细</h2>
+                </div>
+            </div>
+            <div class="row">
+                @if(isNotEmpty(item.orderMoney) && item.orderMoney > 0){
+                    <div class="col-sm-6 b-r">
+                        <#label id="orderMoney" name="订单总价" value="${item.orderMoney}元"/>
+                        <#label id="travelMoney" name="行程费" value="${item.travelMoney}元"/>
+                        <#label id="parkMoney" name="停车费" value="${item.parkMoney}元"/>
+                        <#label id="roadTollMoney" name="过路费" value="${item.roadTollMoney}元"/>
+                        <#label id="tipMoney" name="小费" value="${item.tipMoney}元"/>
+
+                        @if(isNotEmpty(item.payMoney)){
+                        <#label id="payMoney" name="实际支付费用" value="${item.payMoney}元"/>
+                        @}else{
+                        <#label id="payMoney" name="实际支付费用" value="0.00元"/>
+                        @}
+
+                        <#label id="payTypeStr" name="支付方式" value="${item.payTypeStr}"/>
+                        <#label id="couponMoney" name="优惠券抵扣费用" value="${item.couponMoney}元"/>
+                        <#label id="redPacketMoney" name="红包抵扣金额" value="${item.redPacketMoney}元"/>
+                    </div>
+                    <div class="col-sm-6">
+                        <#label id="platIncome" name="平台收益" value="${item.platIncome}元"/>
+                        <#label id="companyIncome" name="分公司收益" value="${item.companyIncome}元"/>
+                        <#label id="franchiseeIncome" name="加盟商收益" value="${item.franchiseeIncome}元"/>
+                        <#label id="driverIncome" name="司机收益" value="${item.driverIncome}元"/>
+                    </div>
+                @}else{
+                <h4 style="margin-left: 10%">暂无费用明细</h4>
+                @}
+            </div>
+            <div class="row" style="margin-top: 30px;">
+                <div class="col-sm-4">
+                    <h2 class="h3Class" style="font-weight: 700;">线路轨迹</h2>
+                </div>
+            </div>
+            <div class="row">
+                <div class="col-sm-10">
+                    <div class="form-horizontal" id="container" style="margin-left: 50px;width: 100%; height: 500px;"></div>
+                    <div class="input-card" style="margin-left: 50px;">
+                        <h4>轨迹回放控制</h4>
+                        <div class="input-item">
+                            <input type="button" class="btn" value="开始动画" id="start" onclick="startAnimation()"/>
+                            <input type="button" class="btn" value="暂停动画" id="pause" onclick="pauseAnimation()"/>
+                            <input type="button" class="btn" value="继续动画" id="resume" onclick="resumeAnimation()"/>
+                            <input type="button" class="btn" value="停止动画" id="stop" onclick="stopAnimation()"/>
+                        </div>
+                        <div class="input-item">
+
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div class="row" style="margin-top: 30px;">
+                <div class="col-sm-1">
+                    <h2 class="h3Class" style="font-weight: 700;">行程录音</h2>
+                </div>
+                <div class="col-sm-10">
+                    <audio id="audio" src="http://www.w3capi.com/upload/audio/audio_example.mp3" controls muted data-enabled="false">
+                        <!--                    <source src="${item.routeRecord}" type="audio/mpeg">-->
+                    </audio>
+                </div>
+            </div>
+
+        </div>
+    </div>
+</div>
+<script src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script>
+<script src="https://webapi.amap.com/maps?v=1.4.8&key=e17d799b2506d05faf7f88320a266803"></script>
+<script src="https://cache.amap.com/lbs/static/addToolbar.js"></script>
+<script src="${ctxPath}/static/modular/system/tOrderTransfer/tOrderTransfer_info.js"></script>
+<script>
+    $(function (){
+        var myAudio = document.getElementById('audio');
+        console.log(myAudio.dataset.enabled);
+        if (myAudio.dataset.enabled === 'false') {
+            console.log('audio is disabled');
+            myAudio.pause();
+        }
+    })
+</script>
+@}
diff --git a/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTransfer/tOrderTransfer_trajectory.html b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTransfer/tOrderTransfer_trajectory.html
new file mode 100644
index 0000000..2ce7f78
--- /dev/null
+++ b/ManagementNTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTransfer/tOrderTransfer_trajectory.html
@@ -0,0 +1,52 @@
+@layout("/common/_container.html"){
+<style type="text/css">
+    html, body, #container {
+        height: 100%;
+        width: 100%;
+    }
+
+    .input-card .btn{
+        margin-right: 1.2rem;
+        width: 9rem;
+    }
+
+    .input-card .btn:last-child{
+        margin-right: 0;
+    }
+</style>
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal">
+            <input type="hidden" id="id" name="id" value="${tOrderTransferId}">
+            <div class="row" style="margin-top: 30px;">
+                <div class="col-sm-4">
+                    <h2 class="h3Class" style="font-weight: 700;">线路轨迹</h2>
+                </div>
+            </div>
+            <div class="row" style="margin-top: 30px;">
+                <div class="col-sm-10">
+                    <div class="form-horizontal" id="container" style="margin-left: 50px;width: 100%; height: 500px;"></div>
+                    <div class="input-card" style="margin-left: 50px;">
+                        <h4>轨迹回放控制</h4>
+                        <div class="input-item">
+                            <input type="button" class="btn" value="开始动画" id="start" onclick="startAnimation()"/>
+                            <input type="button" class="btn" value="暂停动画" id="pause" onclick="pauseAnimation()"/>
+                            <input type="button" class="btn" value="继续动画" id="resume" onclick="resumeAnimation()"/>
+                            <input type="button" class="btn" value="停止动画" id="stop" onclick="stopAnimation()"/>
+                        </div>
+                        <div class="input-item">
+
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+        </div>
+
+    </div>
+</div>
+<script src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script>
+<script src="https://webapi.amap.com/maps?v=1.4.8&key=e17d799b2506d05faf7f88320a266803"></script>
+<script src="https://cache.amap.com/lbs/static/addToolbar.js"></script>
+<script src="${ctxPath}/static/modular/system/tOrderTransfer/tOrderTransfer_info.js"></script>
+@}
diff --git a/ManagementNTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderTransfer/tOrderTransfer.js b/ManagementNTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderTransfer/tOrderTransfer.js
new file mode 100644
index 0000000..8366e6f
--- /dev/null
+++ b/ManagementNTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderTransfer/tOrderTransfer.js
@@ -0,0 +1,379 @@
+/**
+ * 接送机订单管理初始化
+ */
+var TOrderTransfer = {
+    id: "TOrderTransferTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1
+};
+
+/**
+ * 初始化表格的列
+ */
+TOrderTransfer.initColumn = function () {
+    return [
+        {field: 'selectItem', radio: true},
+        {title: '主键id', field: 'id', visible: false, align: 'center', valign: 'middle'},
+        {title: '下单时间', field: 'insertTime', visible: true, align: 'center', valign: 'middle',width:'8%',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.insertTime != '' && row.insertTime != null) {
+                    var time = row.insertTime.replace(" ",'<br>');
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.insertTime + '" onfocus="TUser.tooltip()">' + time + '</p>']
+                }
+                return btn;
+            }
+        },
+        {title: '订单编号', field: 'orderNum', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.orderNum != '' && row.orderNum != null) {
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.orderNum + '" onfocus="TUser.tooltip()">' + row.orderNum + '</p>']
+                }
+                return btn;
+            }
+        },
+        {title: '订单来源', field: 'orderSource', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.orderSource != '' && row.orderSource != null) {
+                    if (row.orderSource == 1){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="APP下单" onfocus="TUser.tooltip()">APP下单</p>']
+                    } else if (row.orderSource == 2){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="扫码下单" onfocus="TUser.tooltip()">扫码下单</p>']
+                    } else if (row.orderSource == 3){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="小程序下单" onfocus="TUser.tooltip()">小程序下单</p>']
+                    } else if (row.orderSource == 4){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="司机下单" onfocus="TUser.tooltip()">司机下单</p>']
+                    } else if (row.orderSource == 5){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="调度下单" onfocus="TUser.tooltip()">调度下单</p>']
+                    }
+                }
+                return btn;
+            }
+        },
+        {title: '乘车时间', field: 'travelTime', visible: true, align: 'center', valign: 'middle',width:'10%',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.travelTime != '' && row.travelTime != null) {
+                    var time = row.travelTime.replace(" ",'<br>');
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.travelTime + '" onfocus="TUser.tooltip()">' + time + '</p>']
+                }
+                return btn;
+            }
+        },
+        {title: '用户id', field: 'userId', visible: false, align: 'center', valign: 'middle'},
+        {title: '下单用<br/>户昵称', field: 'userName', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.userName != '' && row.userName != null) {
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.userName + '" onfocus="TUser.tooltip()">' + row.userName + '</p>']
+                }
+                return btn;
+            }
+        },
+        {title: '下单用<br/>户手机', field: 'userPhone', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.userPhone != '' && row.userPhone != null) {
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.userPhone + '" onfocus="TUser.tooltip()">' + row.userPhone + '</p>']
+                }
+                return btn;
+            }
+        },
+        {title: '乘车用<br/>户姓名', field: 'passengers', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.passengers != '' && row.passengers != null) {
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.passengers + '" onfocus="TUser.tooltip()">' + row.passengers + '</p>']
+                }
+                return btn;
+            }
+        },
+        {title: '乘车用<br/>户手机', field: 'passengersPhone', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.passengersPhone != '' && row.passengersPhone != null) {
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.passengersPhone + '" onfocus="TUser.tooltip()">' + row.passengersPhone + '</p>']
+                }
+                return btn;
+            }
+        },
+        {title: '起点', field: 'startAddress', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.startAddress != '' && row.startAddress != null) {
+                    var str = row.startAddress;
+                    var str1 = "";
+                    var arr = "";
+                    for(var i=0,len=str.length/15;i<len;i++) {
+                        str1 = str.substr(0,15);
+                        str = str.replace(str1,'');
+                        arr += str1 + "<br>";
+                    }
+                    arr = arr.substring(0,arr.length-4);
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.startAddress + '" onfocus="TUser.tooltip()">' + arr + '</p>']
+                }
+                return btn;
+            }
+        },
+        {title: '终点', field: 'endAddress', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.endAddress != '' && row.endAddress != null) {
+                    var str = row.endAddress;
+                    var str1 = "";
+                    var arr = "";
+                    for(var i=0,len=str.length/15;i<len;i++) {
+                        str1 = str.substr(0,15);
+                        str = str.replace(str1,'');
+                        arr += str1 + "<br>";
+                    }
+                    arr = arr.substring(0,arr.length-4);
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.endAddress + '" onfocus="TUser.tooltip()">' + arr + '</p>']
+                }
+                return btn;
+            }
+        },
+        {title: '选择车型', field: 'serverCarModel', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.serverCarModel != '' && row.serverCarModel != null) {
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.serverCarModel + '" onfocus="TUser.tooltip()">' + row.serverCarModel + '</p>']
+                }
+                return btn;
+            }
+        },
+        {title: '接单司机', field: 'driver', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.driver != '' && row.driver != null) {
+                    var driverName1 = row.driver.replace("-","<br>");
+                    var driverName2 = row.driver.replace("-","&#10;");
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + driverName2 + '" onfocus="TUser.tooltip()">' + driverName1 + '</p>']
+                }
+                return btn;
+            }
+        },
+        {title: '接单车辆', field: 'car', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.car != '' && row.car != null) {
+                    var car1 = row.car.replace("-","<br>");
+                    var car2 = row.car.replace("-","&#10;");
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + car2 + '" onfocus="TUser.tooltip()">' + car1 + '</p>']
+                }
+                return btn;
+            }
+        },
+        {title: '订单金额', field: 'orderMoney', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.orderMoney != '' && row.orderMoney != null) {
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.orderMoney + '" onfocus="TUser.tooltip()">' + row.orderMoney + '</p>']
+                }
+                return btn;
+            }
+        },
+        {title: '状态', field: 'state', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.state != '' && row.state != null) {
+                    if (row.state == 1){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="待接单" onfocus="TUser.tooltip()">待接单</p>']
+                    } else if (row.state == 2){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="待出发" onfocus="TUser.tooltip()">待出发</p>']
+                    } else if (row.state == 3){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="待到达预约地点" onfocus="TUser.tooltip()">待到达预约地点</p>']
+                    } else if (row.state == 4){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="待乘客上车" onfocus="TUser.tooltip()">待乘客上车</p>']
+                    } else if (row.state == 5){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="服务中" onfocus="TUser.tooltip()">服务中</p>']
+                    } else if (row.state == 6){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="完成服务" onfocus="TUser.tooltip()">完成服务</p>']
+                    } else if (row.state == 7){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="待支付" onfocus="TUser.tooltip()">待支付</p>']
+                    } else if (row.state == 8){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="待评价" onfocus="TUser.tooltip()">待评价</p>']
+                    } else if (row.state == 9){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="已完成" onfocus="TUser.tooltip()">已完成</p>']
+                    } else if (row.state == 10){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="已取消" onfocus="TUser.tooltip()">已取消</p>']
+                    } else if (row.state == 11){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="改派中" onfocus="TUser.tooltip()">改派中</p>']
+                    } else if (row.state == 12){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="取消待支付" onfocus="TUser.tooltip()">取消待支付</p>']
+                    }
+                }
+                return btn;
+            }
+        }
+    ];
+};
+
+/**
+ * 检查是否选中
+ */
+TOrderTransfer.check = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length == 0){
+        Feng.info("请先选中表格中的某一记录!");
+        return false;
+    }else{
+        TOrderTransfer.seItem = selected[0];
+        return true;
+    }
+};
+
+/**
+ * 打开查看接送机订单详情
+ */
+TOrderTransfer.orderDetail = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title: '接送机订单详情',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tOrderTransfer/tOrderTransfer_orderDetail/' + TOrderTransfer.seItem.id
+        });
+        this.layerIndex = index;
+    }
+};
+
+/**
+ * 取消订单
+ */
+TOrderTransfer.cancelOrder = function(){
+    if (this.check()) {
+        var nickname = TOrderTransfer.seItem.orderNum;
+        if (nickname == "" || nickname == null || nickname == undefined) {
+            nickname = "该订单";
+        } else {
+            nickname = "【" + nickname + "】";
+        }
+        if (TOrderTransfer.seItem.state == 7 || TOrderTransfer.seItem.state == 8 || TOrderTransfer.seItem.state == 9 || TOrderTransfer.seItem.state == 10 ) {
+            swal("取消失败", "【待评价】【已完成】【已取消】状态下不能执行此操作", "warning");
+            return;
+        }
+        swal({
+            title: "您是否确认取消订单" + nickname + "?",
+            text: "请谨慎操作,取消后数据无法恢复!",
+            type: "warning",
+            showCancelButton: true,
+            confirmButtonColor: "#DD6B55",
+            confirmButtonText: "取消订单",
+            closeOnConfirm: false
+        }, function () {
+            var ajax = new $ax(Feng.ctxPath + "/tOrderTransfer/cancel", function (data) {
+                layer.msg("加载中...",{
+                    icon:16,
+                    time:-1
+                });
+                swal("取消订单成功", "您已经成功取消了" + nickname + "。", "success");
+                TOrderTransfer.table.refresh();
+                layer.closeAll()
+            }, function (data) {
+                swal("取消订单失败", data.responseJSON.message + "!", "warning");
+                layer.closeAll()
+            });
+            ajax.set("tOrderTransferId", TOrderTransfer.seItem.id);
+            ajax.start();
+        });
+    }
+}
+
+/**
+ * 订单轨迹
+ */
+TOrderTransfer.trajectory = function(){
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title: '接送机订单轨迹',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tOrderTransfer/tOrderTransfer_trajectory/' + TOrderTransfer.seItem.id
+        });
+        this.layerIndex = index;
+    }
+}
+
+
+/**
+ * 删除接送机订单
+ */
+TOrderTransfer.deleteOrder = function () {
+    if (this.check()) {
+        var orderNum = TOrderTransfer.seItem.orderNum;
+        if (orderNum == "" || orderNum == null || orderNum == undefined) {
+            orderNum = "该订单";
+        } else {
+            orderNum = "【" + orderNum + "】";
+        }
+        if (TOrderTransfer.seItem.state != 10) {
+            swal("删除失败", "【已取消】状态下才能执行此操作", "warning");
+            return;
+        }
+        swal({
+            title: "您是否确认删除" + orderNum + "?",
+            text: "请谨慎操作,删除后数据无法恢复!",
+            type: "warning",
+            showCancelButton: true,
+            confirmButtonColor: "#DD6B55",
+            confirmButtonText: "删除",
+            closeOnConfirm: false
+        }, function () {
+            var ajax = new $ax(Feng.ctxPath + "/tOrderTransfer/delete", function (data) {
+                swal("删除成功", "您已经删除了" + orderNum + "。", "success");
+                TOrderTransfer.table.refresh();
+            }, function (data) {
+                swal("删除失败", data.responseJSON.message + "!", "warning");
+            });
+            ajax.set("tOrderTransferId", TOrderTransfer.seItem.id);
+            ajax.start();
+        });
+    }
+};
+
+/**
+ * 查询接送机订单列表
+ */
+TOrderTransfer.search = function () {
+    var queryData = {};
+    queryData['insertTime'] = $("#insertTime").val();
+    queryData['orderNum'] = $("#orderNum").val();
+    queryData['orderSource'] = $("#orderSource").val();
+    queryData['userName'] = $("#userName").val();
+    queryData['userPhone'] = $("#userPhone").val();
+    queryData['passengers'] = $("#passengers").val();
+    queryData['passengersPhone'] = $("#passengersPhone").val();
+    queryData['serverCarModelId'] = $("#serverCarModelId").val();
+    queryData['driver'] = $("#driver").val();
+    queryData['state'] = $("#state").val();
+    TOrderTransfer.table.refresh({query: queryData});
+};
+
+TOrderTransfer.resetSearch = function () {
+    $("#insertTime").val("");
+    $("#orderNum").val("");
+    $("#orderSource").val("");
+    $("#userName").val("");
+    $("#userPhone").val("");
+    $("#passengers").val("");
+    $("#passengersPhone").val("");
+    $("#serverCarModelId").val("");
+    $("#driver").val("");
+    $("#state").val("");
+    TOrderTransfer.search();
+};
+
+$(function () {
+    var defaultColunms = TOrderTransfer.initColumn();
+    var table = new BSTable(TOrderTransfer.id, "/tOrderTransfer/list", defaultColunms);
+    table.setPaginationType("server");
+    TOrderTransfer.table = table.init();
+});
diff --git a/ManagementNTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderTransfer/tOrderTransfer_info.js b/ManagementNTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderTransfer/tOrderTransfer_info.js
new file mode 100644
index 0000000..992809e
--- /dev/null
+++ b/ManagementNTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderTransfer/tOrderTransfer_info.js
@@ -0,0 +1,248 @@
+/**
+ * 初始化专车订单详情对话框
+ */
+var TOrderTransferInfoDlg = {
+    tOrderTransferInfoData : {}
+};
+
+/**
+ * 清除数据
+ */
+TOrderTransferInfoDlg.clearData = function() {
+    this.tOrderTransferInfoData = {};
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TOrderTransferInfoDlg.set = function(key, val) {
+    this.tOrderTransferInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val;
+    return this;
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TOrderTransferInfoDlg.get = function(key) {
+    return $("#" + key).val();
+}
+
+/**
+ * 关闭此对话框
+ */
+TOrderTransferInfoDlg.close = function() {
+    parent.layer.close(window.parent.TOrderTransfer.layerIndex);
+}
+
+/**
+ * 收集数据
+ */
+TOrderTransferInfoDlg.collectData = function() {
+    this
+    .set('id')
+    .set('type')
+    .set('userId')
+    .set('driverId')
+    .set('carId')
+    .set('orderNum')
+    .set('placementLon')
+    .set('placementLat')
+    .set('placementAddress')
+    .set('startLon')
+    .set('startLat')
+    .set('endLon')
+    .set('startAddress')
+    .set('endLat')
+    .set('endAddress')
+    .set('boardingLon')
+    .set('boardingLat')
+    .set('boardingAddress')
+    .set('boardingTime')
+    .set('getoffLon')
+    .set('getoffLat')
+    .set('getoffAddress')
+    .set('getoffTime')
+    .set('mileage')
+    .set('payManner')
+    .set('payType')
+    .set('orderMoney')
+    .set('startMoney')
+    .set('mileageMoney')
+    .set('durationMoney')
+    .set('longDistanceMoney')
+    .set('parkMoney')
+    .set('roadTollMoney')
+    .set('redPacketMoney')
+    .set('couponMoney')
+    .set('redPacketId')
+    .set('couponId')
+    .set('discount')
+    .set('discountMoney')
+    .set('activityId')
+    .set('companyId')
+    .set('payMoney')
+    .set('substitute')
+    .set('passengers')
+    .set('passengersPhone')
+    .set('state')
+    .set('insertTime')
+    .set('travelTime')
+    .set('snatchOrderTime')
+    .set('setOutTime')
+    .set('arriveTime')
+    .set('startServiceTime')
+    .set('endServiceTime')
+    .set('orderType')
+    .set('orderSource')
+    .set('invoiceId')
+    .set('isReassign')
+    .set('reassignNotice')
+    .set('trackId')
+    .set('isDelete')
+    .set('oldState')
+    .set('telX')
+    .set('bindId')
+    .set('serverCarModelId');
+}
+
+/**
+ * 提交添加
+ */
+TOrderTransferInfoDlg.addSubmit = function() {
+
+    this.clearData();
+    this.collectData();
+
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tOrderTransfer/add", function(data){
+        Feng.success("添加成功!");
+        window.parent.TOrderTransfer.table.refresh();
+        TOrderTransferInfoDlg.close();
+    },function(data){
+        Feng.error("添加失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set(this.tOrderTransferInfoData);
+    ajax.start();
+}
+
+/**
+ * 提交修改
+ */
+TOrderTransferInfoDlg.editSubmit = function() {
+
+    this.clearData();
+    this.collectData();
+
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tOrderTransfer/update", function(data){
+        Feng.success("修改成功!");
+        window.parent.TOrderTransfer.table.refresh();
+        TOrderTransferInfoDlg.close();
+    },function(data){
+        Feng.error("修改失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set(this.tOrderTransferInfoData);
+    ajax.start();
+}
+
+var map = new AMap.Map("container", {
+    resizeEnable: true,
+    zoom: 14
+});
+$(function() {
+    getTrajectory();
+});
+
+function getTrajectory() {
+    $.ajax({
+        url: Feng.ctxPath + '/tOrderTransfer/getOrderTrack',
+        type: 'POST',
+        data:{
+            orderDetailId: $("#id").val()
+        },
+        success: function (res) {
+            if(res.status == 200){
+                var data = res.data;
+                if(data.length > 0){
+                    orderTrack(data);
+                }/*else{
+                    Feng.error("当前订单没有轨迹");
+                }*/
+            }else{
+                Feng.error(res.msg);
+            }
+        }
+    });
+}
+
+var marker, lineArr = [];
+
+function orderTrack(data) {
+    for(var i in data){
+        var waypoints = [];
+        var lon = parseFloat(data[i].lon);
+        var lat = parseFloat(data[i].lat);
+        waypoints.push(lon);
+        waypoints.push(lat);
+        lineArr.push(waypoints);
+    }
+
+    marker = new AMap.Marker({
+        map: map,
+        position: lineArr[0],
+        icon: "https://webapi.amap.com/images/car.png",
+        offset: new AMap.Pixel(-26, -13),
+        autoRotation: true,
+        angle:-90,
+    });
+
+    // 绘制轨迹
+    var polyline = new AMap.Polyline({
+        map: map,
+        path: lineArr,
+        showDir:true,
+        strokeColor: "#28F",  //线颜色
+        // strokeOpacity: 1,     //线透明度
+        strokeWeight: 6,      //线宽
+        // strokeStyle: "solid"  //线样式
+    });
+
+    var passedPolyline = new AMap.Polyline({
+        map: map,
+        // path: lineArr,
+        strokeColor: "#AF5",  //线颜色
+        // strokeOpacity: 1,     //线透明度
+        strokeWeight: 6,      //线宽
+        // strokeStyle: "solid"  //线样式
+    });
+
+
+    marker.on('moving', function (e) {
+        passedPolyline.setPath(e.passedPath);
+    });
+
+    map.setFitView();
+}
+
+
+function startAnimation () {
+    marker.moveAlong(lineArr, 200);
+}
+
+function pauseAnimation () {
+    marker.pauseMove();
+}
+
+function resumeAnimation () {
+    marker.resumeMove();
+}
+
+function stopAnimation () {
+    marker.stopMove();
+}

--
Gitblit v1.7.1