From 60eb2f18aaf48a15d2af07918ceadff9cb650626 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 21 七月 2025 18:46:36 +0800
Subject: [PATCH] 后台异常订单模块

---
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/CellType.java                                          |   45 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TAbnormalPayOrderMapper.java                            |   23 
 ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderTaxi/tOrderTaxi.js                                              |   85 
 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalOrderCar/tAbnormalOrder.html                                   |   90 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TAbnormalOrderCarController.java    |  720 +++++
 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar.html                                  |   23 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderTaxiMapper.java                                   |   41 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderTaxiService.java                             |   24 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderPrivateCarService.java                       |   25 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderTaxiServiceImpl.java                     |   13 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCrossCity.java                                  |   41 
 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalOrderCar/tOrderPrivateCar_add.html                             |  487 +++
 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalOrderCar/tOrderPrivateCar_trajectory.html                      |   57 
 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalOrderCar/tAbnormalOrder_orderDetail.html                       |  421 +++
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderPrivateCar.java                                 |   40 
 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalPayOrderCar/tAbnormalOrder_orderDetail.html                    |  271 ++
 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTaxi/tOrderTaxi.html                                              |   22 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderCrossCityService.java                        |   25 
 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalPayOrderCar/tOrderPrivateCar_trajectory.html                   |   57 
 ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tAbnormalPayOrderCar/tAbnormalOrder.js                                |  264 ++
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderCrossCityMapper.xml                       |   85 
 ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderCrossCity/tOrderCrossCity.js                                    |   91 
 ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/trPrivateOrdeCar/tOrderPrivateCar_info.js                             |  287 ++
 ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tAbnormalOrderCar/tAbnormalOrderCar_info.js                           |  312 ++
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderCrossCityMapper.java                              |   25 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TAbnormalPayOrderMapper.xml                     |   39 
 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalPayOrderCar/tAbnormalOrder.html                                |   60 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderPrivateCarMapper.xml                      |   83 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ExcelUtil.java                                         |  351 ++
 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalPayOrderCar/tOrderPrivateCar_add.html                          |  487 +++
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderPrivateCarMapper.java                             |   25 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TAbnormalOrderPayCarController.java |  183 +
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAbnormalPayOrderServiceImpl.java              |   35 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderCrossCityController.java      |  286 ++
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderPrivateCarServiceImpl.java               |   32 
 ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tAbnormalPayOrderCar/tAbnormalOrderCar_info.js                        |  287 ++
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderTaxi.java                                       |   40 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TAbnormalPayOrder.java                                |   82 
 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderCrossCity/tOrderCrossCity.html                                    |   20 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderCrossCityServiceImpl.java                |   14 
 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderCrossCity/tOrderCrossCity_detail.html                             |   67 
 ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tAbnormalOrderCar/tAbnormalOrder.js                                   |  478 +++
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/taxi/TOrderTaxiController.java                   |  269 ++
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RoleMapper.xml                                  |    2 
 ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderPrivateCar/tOrderPrivateCar.js                                  |   92 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/TAbnormalPayOrderService.java                       |   24 
 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar_orderDetail.html                      |   65 
 ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/trPrivateOrdeCar/tOrderPrivateCar.js                                  |  434 +++
 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTaxi/tOrderTaxi_edit.html                                         |   67 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderTaxiMapper.xml                            |   73 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java     |  307 ++
 51 files changed, 7,426 insertions(+), 50 deletions(-)

diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TAbnormalOrderCarController.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TAbnormalOrderCarController.java
new file mode 100644
index 0000000..5b32716
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TAbnormalOrderCarController.java
@@ -0,0 +1,720 @@
+package com.stylefeng.guns.modular.system.controller.specialTrain;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.beetl.ShiroExtUtil;
+import com.stylefeng.guns.core.common.constant.factory.PageFactory;
+import com.stylefeng.guns.core.util.DateUtil;
+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.*;
+import com.stylefeng.guns.modular.system.util.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * 快车订单控制器
+ *
+ * @author fengshuonan
+ * @Date 2020-09-02 17:28:59
+ */
+@Controller
+@RequestMapping("/abnormal")
+public class TAbnormalOrderCarController extends BaseController {
+
+    private String PREFIX = "/system/tAbnormalOrderCar/";
+
+    @Autowired
+    private ITOrderPrivateCarService tOrderPrivateCarService;
+
+    @Autowired
+    private ITServerCarmodelService tServerCarmodelService;
+
+    @Autowired
+    private ITOrderPositionService tOrderPositionService;
+
+    @Autowired
+    private ITServerCarmodelService serverCarmodelService;
+
+    @Autowired
+    private ITDriverService tDriverService;
+    
+    @Autowired
+    private PushMinistryOfTransportUtil pushMinistryOfTransportUtil;
+    @Autowired
+    private ITUserService userService;
+    @Resource
+    private OrderCancelMapper orderCancelMapper;
+    @Autowired
+    private ITOrderCrossCityService tOrderCrossCityService;
+
+    @Autowired
+    private ITOrderTaxiService tOrderTaxiService;
+
+
+    @Value("${pushMinistryOfTransport}")
+    private boolean pushMinistryOfTransport;
+    
+    @Resource
+    private MongoTemplate mongoTemplate;
+    
+    @Autowired
+    private ShiroExtUtil shiroExtUtil;
+
+    @Autowired
+    private TAbnormalPayOrderService tAbnormalPayOrderService;
+    
+    
+    /**
+     * 跳转到快车订单首页
+     */
+    @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 + "tAbnormalOrder.html";
+    }
+
+    /**
+     * 跳转到修改快车订单
+     */
+    @RequestMapping("/tOrderPrivateCar_orderDetail")
+    public String tOrderPrivateCarUpdate(Integer tOrderPrivateCarId,Integer type, Model model) {
+        if(type==1){
+            Map<String, Object> item = tOrderPrivateCarService.getPrivateCarOrderDetailById(tOrderPrivateCarId);
+
+            Object o1 = item.get("abnormalImg");
+            if(o1!=null){
+                String[] split = o1.toString().split(",");
+                model.addAttribute("abnormalImg",split);
+            }else {
+                model.addAttribute("abnormalImg",new String[]{});
+            }
+            // money是修改后的金额
+            model.addAttribute("money",0);
+            Object o2 = item.get("responsibilityType");
+            if(o2!=null){
+                if(Integer.valueOf(o2.toString())>2){
+                    TAbnormalPayOrder tAbnormalPayOrder = tAbnormalPayOrderService.selectOne(new EntityWrapper<TAbnormalPayOrder>().eq("type", 1).eq("orderNum", item.get("orderNum")));
+                    model.addAttribute("money",tAbnormalPayOrder.getPayMoney());
+                }
+            }
+            model.addAttribute("item",item);
+            model.addAttribute("type",1);
+
+            List<TOrderPrivateCar> tOrderPrivateCars = tOrderPrivateCarService.selectList(new EntityWrapper<TOrderPrivateCar>().eq("pid", tOrderPrivateCarId).eq("isDelete", 1));
+            List<Map<String, Object>> maps = new ArrayList<>();
+            for (TOrderPrivateCar tOrderPrivateCar : tOrderPrivateCars) {
+                item = tOrderPrivateCarService.getPrivateCarOrderDetailById(tOrderPrivateCar.getId());
+                String phone = item.get("userPhone").toString();
+                item.put("userPhone1", phone.substring(phone.length() - 4));
+                maps.add(item);
+            }
+            model.addAttribute("maps",maps);
+        }else if(type==2){
+            Map<String, Object> item = tOrderCrossCityService.getCrossCityOrderDetailById(tOrderPrivateCarId);
+            Object o1 = item.get("abnormalImg");
+            if(o1!=null){
+                String[] split = o1.toString().split(",");
+                model.addAttribute("abnormalImg",split);
+            }else {
+                model.addAttribute("abnormalImg",new String[]{});
+            }
+            Object o2 = item.get("responsibilityType");
+            model.addAttribute("money",0);
+            if(o2!=null){
+                if(Integer.valueOf(o2.toString())>2){
+                    TAbnormalPayOrder tAbnormalPayOrder = tAbnormalPayOrderService.selectOne(new EntityWrapper<TAbnormalPayOrder>().eq("type", 2).eq("orderNum", item.get("orderNum")));
+                    model.addAttribute("money",tAbnormalPayOrder.getPayMoney());
+                }
+            }
+            model.addAttribute("type",2);
+            model.addAttribute("item",item);
+        }else if(type==3){
+            Map<String, Object> item = tOrderTaxiService.getTaxiOrderDetailById(tOrderPrivateCarId);
+            Object o1 = item.get("abnormalImg");
+            if(o1!=null){
+                String[] split = o1.toString().split(",");
+                model.addAttribute("abnormalImg",split);
+            }else {
+                model.addAttribute("abnormalImg",new String[]{});
+            }
+            model.addAttribute("money",0);
+            Object o2 = item.get("responsibilityType");
+            if(o2!=null){
+                if(Integer.valueOf(o2.toString())>2){
+                    TAbnormalPayOrder tAbnormalPayOrder = tAbnormalPayOrderService.selectOne(new EntityWrapper<TAbnormalPayOrder>().eq("type", 3).eq("orderNum", item.get("orderNum")));
+                    model.addAttribute("money",tAbnormalPayOrder.getPayMoney());
+                }
+            }
+            model.addAttribute("type",3);
+            model.addAttribute("item",item);
+        }
+
+        return PREFIX + "tAbnormalOrder_orderDetail.html";
+    }
+
+    /**
+     * 跳转到出租车订单轨迹页面
+     */
+    @RequestMapping("/tOrderPrivateCar_trajectory/{tOrderPrivateCarId}")
+    public String tOrderTaxi_trajectory(@PathVariable Integer tOrderPrivateCarId, Model model) {
+        model.addAttribute("tOrderPrivateCarId",tOrderPrivateCarId);
+        return PREFIX + "tOrderPrivateCar_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,
+                       Integer rideType,
+                       Integer abnormal,
+                       Integer promotion,
+                       String promotionUser,Integer type,Integer abnormalStatus
+    ) {
+        String beginTime = null;
+        String endTime = null;
+        if (SinataUtil.isNotEmpty(insertTime)) {
+            String[] timeArray = insertTime.split(" - ");
+            beginTime = timeArray[0];
+            endTime = timeArray[1];
+        }
+        abnormal = 2;
+        Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
+        // 快车
+        if(type==1){
+            page.setRecords(tOrderPrivateCarService.getPrivateCarOrderList(page, beginTime, endTime, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(),
+                    orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state, rideType, abnormal, promotion, promotionUser,abnormalStatus));
+            return super.packForBT(page);
+            // 跨城
+        }else if(type==2){
+            page.setRecords(tOrderCrossCityService.getCrossCityOrderList(page, beginTime, endTime, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(), orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, null, state, abnormal, promotion, promotionUser,abnormalStatus));
+            return super.packForBT(page);
+            // 出租车
+        }else if(type==3){
+            page.setRecords(tOrderTaxiService.getTaxiOrderList(page, beginTime, endTime, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(), orderNum, orderSource, userName, userPhone, passengers, passengersPhone, driver, state, abnormal, promotion, promotionUser,abnormalStatus));
+            return super.packForBT(page);
+        }
+        return super.packForBT(page);
+    }
+
+
+
+    @GetMapping("/export")
+    @ResponseBody
+    public void export(String insertTime,
+                       String orderNum,
+                       Integer orderSource,
+                       String userName,
+                       String userPhone,
+                       String passengers,
+                       String passengersPhone,
+                       Integer serverCarModelId,
+                       String driver,
+                       Integer state,
+                       Integer rideType,
+                       Integer abnormal,
+                       Integer promotion,
+                       String promotionUser,Integer type,Integer abnormalStatus, HttpServletRequest request, HttpServletResponse response) {
+        try {
+            String beginTime = null;
+            String endTime = null;
+            if (SinataUtil.isNotEmpty(insertTime)) {
+                String[] timeArray = insertTime.split(" - ");
+                beginTime = timeArray[0];
+                endTime = timeArray[1];
+            }
+            abnormal = 2;
+            List<Map<String, Object>> list=new ArrayList<>();
+            if(type==1){
+                list =  tOrderPrivateCarService.getPrivateCarOrderListExport(null, beginTime, endTime, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(),
+                        orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state, rideType, abnormal, promotion, promotionUser,abnormalStatus);
+            }else if(type==2){
+                list =  tOrderCrossCityService.getCrossCityOrderListExport(null, beginTime, endTime, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(), orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, null, state, abnormal, promotion, promotionUser,abnormalStatus);
+            }else if(type==3){
+                list =  tOrderTaxiService.getTaxiOrderListExport(null, beginTime, endTime, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(), orderNum, orderSource, userName, userPhone, passengers, passengersPhone, driver, state, abnormal, promotion, promotionUser,abnormalStatus);
+            }
+
+
+            // 表格数据【封装】
+            List<List<String>> dataList = new ArrayList<>();
+
+            //第一行显示【封装】
+            List<String> twoList = new ArrayList<String>();
+            twoList.add("总计:");
+            twoList.add(String.valueOf(list.size())+"条");
+            dataList.add(twoList);
+
+            // 列【封装】
+            List<String> shellList = new ArrayList<String>();
+            shellList.add("下单时间");
+            shellList.add("订单编号");
+            shellList.add("订单来源");
+            shellList.add("乘车时间");
+            shellList.add("下单用户昵称");
+            shellList.add("下单用户手机");
+            shellList.add("乘车用户姓名");
+            shellList.add("乘车用户手机");
+            shellList.add("起点");
+            shellList.add("终点");
+            shellList.add("线路名称");
+            shellList.add("选择车型");
+            shellList.add("接单司机");
+            shellList.add("接单车辆");
+            shellList.add("订单金额");
+            shellList.add("状态");
+            shellList.add("是否异常订单");
+            shellList.add("是否推广订单");
+            shellList.add("推广员姓名");
+            shellList.add("推广员电话");
+            dataList.add(shellList);
+
+            for (Map<String,Object> object : list){
+                // 详细数据列【封装】
+                shellList = new ArrayList<String>();
+                if(SinataUtil.isNotEmpty(object.get("insertTime"))){
+                    shellList.add(DateUtil.formatDate(DateUtil.parse(object.get("insertTime").toString(),"YYYY-MM-dd HH:mm:ss.S"), "YYYY-MM-dd HH:mm:ss"));
+                }else{
+                    shellList.add("-");
+                }
+                if(SinataUtil.isNotEmpty(object.get("orderNum"))){
+                    shellList.add(object.get("orderNum").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                // 1:APP下单,2:扫码下单,3:小程序下单,4:司机下单,5:调度下单
+                if(SinataUtil.isNotEmpty(object.get("orderSource"))){
+                    switch (object.get("orderSource").toString()){
+                        case "1":
+                            shellList.add("APP下单");
+                            break;
+                        case "2":
+                            shellList.add("扫码下单");
+                            break;
+                        case "3":
+                            shellList.add("小程序下单");
+                            break;
+                        case "4":
+                            shellList.add("司机下单");
+                            break;
+                        case "5":
+                            shellList.add("调度下单");
+                            break;
+                        case "6":
+                            shellList.add("道行龙城下单");
+                            break;
+                        default:
+                            shellList.add("-");
+                            break;
+                    }
+
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("travelTime"))){
+                    shellList.add(DateUtil.formatDate(DateUtil.parse(object.get("travelTime").toString(),"YYYY-MM-dd HH:mm:ss.S"), "YYYY-MM-dd HH:mm:ss"));
+                }else{
+                    shellList.add("-");
+                }
+
+
+                if(SinataUtil.isNotEmpty(object.get("userName"))){
+                    shellList.add(object.get("userName").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("userPhone"))){
+                    shellList.add(object.get("userPhone").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("passengers"))){
+                    shellList.add(object.get("passengers").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("passengersPhone"))){
+                    shellList.add(object.get("passengersPhone").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+
+                if(SinataUtil.isNotEmpty(object.get("startAddress"))){
+                    shellList.add(object.get("startAddress").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("endAddress"))){
+                    shellList.add(object.get("endAddress").toString());
+                }else{
+                    shellList.add("-");
+                }
+                if(SinataUtil.isNotEmpty(object.get("lineName"))){
+                    shellList.add(object.get("lineName").toString());
+                }else{
+                    shellList.add("-");
+                }
+                if(SinataUtil.isNotEmpty(object.get("serverCarModelName"))){
+                    shellList.add(object.get("serverCarModelName").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("driver"))){
+                    shellList.add(object.get("driver").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("car"))){
+                    shellList.add(object.get("car").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("orderMoney"))){
+                    shellList.add(object.get("orderMoney").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                // 1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付
+                if(SinataUtil.isNotEmpty(object.get("state"))){
+                    switch (object.get("state").toString()){
+                        case "1":
+                            shellList.add("待接单");
+                            break;
+                        case "2":
+                            shellList.add("待出发");
+                            break;
+                        case "3":
+                            shellList.add("待到达预约地点");
+                            break;
+                        case "4":
+                            shellList.add("待乘客上车");
+                            break;
+                        case "5":
+                            shellList.add("服务中");
+                            break;
+                        case "6":
+                            shellList.add("完成服务");
+                            break;
+                        case "7":
+                            shellList.add("待支付");
+                            break;
+                        case "8":
+                            shellList.add("待评价");
+                            break;
+                        case "9":
+                            shellList.add("已完成");
+                            break;
+                        case "10":
+                            shellList.add("已取消");
+                            break;
+                        case "11":
+                            shellList.add("改派中");
+                            break;
+                        case "12":
+                            shellList.add("取消待支付");
+                            break;
+                        default:
+                            shellList.add("-");
+                            break;
+                    }
+                }
+
+
+                if(SinataUtil.isNotEmpty(object.get("abnormal"))){
+                    shellList.add(object.get("abnormal").toString().equals("1")?"否":"是");
+                }else{
+                    shellList.add("-");
+                }
+
+
+                if(SinataUtil.isNotEmpty(object.get("promotion"))){
+                    shellList.add(object.get("promotion").toString().equals("1")?"否":"是");
+                }else{
+                    shellList.add("-");
+                }
+
+
+                if(SinataUtil.isNotEmpty(object.get("promotionUser"))){
+                    shellList.add(object.get("promotionUser").toString());
+                }else{
+                    shellList.add("-");
+                }
+                if(SinataUtil.isNotEmpty(object.get("promotionPhone"))){
+                    shellList.add(object.get("promotionPhone").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+
+                dataList.add(shellList);
+            }
+            try {
+                // 调用工具类进行导出
+                ExcelExportUtil.easySheet("订单导出记录"+DateUtil.formatDate(new Date(), "YYYYMMddHHmmss"), "订单导出记录", dataList,request, response);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    private ResultUtil resultUtil;
+    
+    /**
+     * 获取订单轨迹
+     *
+     * @param orderDetailId
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/getOrderTrack", method = RequestMethod.POST)
+    public ResultUtil getOrderTrack(Integer orderDetailId) {
+        if (ToolUtil.isNotEmpty(orderDetailId)) {
+            try {
+                Query query = new Query()
+                        .addCriteria(Criteria.where("orderId").is(orderDetailId).and("orderType").is(1))
+                        .with(new Sort(Sort.Direction.ASC, "insertTime"));
+                List<TOrderPosition> positions = mongoTemplate.find(query, TOrderPosition.class);
+                resultUtil = ResultUtil.success(positions);
+            } catch (Exception e) {
+                e.printStackTrace();
+                resultUtil = ResultUtil.runErr();
+            }
+        } else {
+            resultUtil = ResultUtil.paranErr();
+        }
+        return resultUtil;
+    }
+    
+    /**
+     * 取消快车订单
+     */
+    @RequestMapping(value = "/cancel")
+    @ResponseBody
+    public Object cancel(@RequestParam Integer tOrderPrivateCarId) {
+        TOrderPrivateCar tOrderPrivateCar = tOrderPrivateCarService.selectById(tOrderPrivateCarId);
+
+        //修改之前司机状态 -- 空闲
+        if(null != tOrderPrivateCar.getDriverId()){
+            TDriver driver = tDriverService.selectById(tOrderPrivateCar.getDriverId());
+            driver.setState(2);
+            tDriverService.updateById(driver);
+        }
+
+        tOrderPrivateCar.setState(10);
+        tOrderPrivateCarService.updateById(tOrderPrivateCar);
+
+        OrderCancel orderCancel = new OrderCancel();
+        orderCancel.setOrderId(tOrderPrivateCarId);
+        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", tOrderPrivateCar.getId().toString());
+        map.put("orderType", "1");
+        String result = HttpRequestUtil.postRequest(PushURL.cancel_order_url, map);
+        System.out.println("快车取消:【orderId="+tOrderPrivateCar.getId().toString()+"】,调用接口:"+result);
+
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                if(pushMinistryOfTransport){//上传数据
+                    pushMinistryOfTransportUtil.orderCancel(tOrderPrivateCarId);
+                }
+            }
+        }).start();
+
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 删除快车订单
+     */
+    @RequestMapping(value = "/delete")
+    @ResponseBody
+    public Object delete(@RequestParam Integer tOrderPrivateCarId) {
+        TOrderPrivateCar tOrderPrivateCar = tOrderPrivateCarService.selectById(tOrderPrivateCarId);
+        tOrderPrivateCar.setIsDelete(2);
+        tOrderPrivateCarService.updateById(tOrderPrivateCar);
+        return SUCCESS_TIP;
+    }
+
+
+    @RequestMapping(value = "/save")
+    @ResponseBody
+    public Object save(Integer responsibilityTypeVal,String remark,String money,Integer type,String orderNum) {
+        if(type==1){
+            TOrderPrivateCar tOrderPrivateCar = tOrderPrivateCarService.selectOne(new EntityWrapper<TOrderPrivateCar>().eq("orderNum",orderNum));
+            tOrderPrivateCar.setResponsibilityType(responsibilityTypeVal);
+            tOrderPrivateCar.setAbnormalStatus(2);
+            if(responsibilityTypeVal>3){
+                tOrderPrivateCar.setResponsibilityMoney(new BigDecimal(money));
+            }
+            tOrderPrivateCar.setAbnormalRemark(remark);
+            tOrderPrivateCarService.updateById(tOrderPrivateCar);
+        }
+
+        if(type==2){
+            TOrderCrossCity tOrderCrossCity = tOrderCrossCityService.selectOne(new EntityWrapper<TOrderCrossCity>().eq("orderNum", orderNum));
+            tOrderCrossCity.setResponsibilityType(responsibilityTypeVal);
+            tOrderCrossCity.setAbnormalStatus(2);
+            if(responsibilityTypeVal>3) {
+                tOrderCrossCity.setResponsibilityMoney(new BigDecimal(money));
+            }
+            tOrderCrossCity.setAbnormalRemark(remark);
+            tOrderCrossCityService.updateById(tOrderCrossCity);
+
+        }
+        if(type==3){
+            TOrderTaxi tOrderTaxi = tOrderTaxiService.selectOne(new EntityWrapper<TOrderTaxi>().eq("orderNum", orderNum));
+            tOrderTaxi.setResponsibilityType(responsibilityTypeVal);
+            tOrderTaxi.setAbnormalStatus(2);
+            if(responsibilityTypeVal>3) {
+                tOrderTaxi.setResponsibilityMoney(new BigDecimal(money));
+            }
+            tOrderTaxi.setAbnormalRemark(remark);
+            tOrderTaxiService.updateById(tOrderTaxi);
+        }
+        return SUCCESS_TIP;
+    }
+
+
+
+    /**
+     * 跳转添加快车订单
+     *
+     * @return
+     */
+    @RequestMapping("/tOrderPrivateCar_addOrder")
+    public String addOrderIndex(Model model) {
+
+        /*获取车型*/
+        Wrapper<TServerCarmodel> wrapper = new EntityWrapper<>();
+        wrapper.eq("state", 1);
+        List<TServerCarmodel> models = serverCarmodelService.selectList(wrapper);
+        model.addAttribute("carModelList", models);
+
+        return PREFIX + "tOrderPrivateCar_add.html";
+    }
+
+
+    @RequestMapping("/add")
+    @ResponseBody
+    public Object add(TOrderPrivateCar privateCar) {
+        TUser user = userService.selectOne(new EntityWrapper<TUser>().eq("phone", privateCar.getPassengersPhone()));
+        if (ToolUtil.isNotEmpty(user)) {///  用户是平台用户
+            privateCar.setOrderNum("PRIVATE" + String.valueOf(1000000 + privateCar.selectList(null).size() + 1).substring(1));
+            privateCar.setUserId(user.getId());
+            privateCar.setState(1);
+            privateCar.setInsertTime(DateUtil.parseTime(DateUtil.getTime()));
+            privateCar.setOrderType(1);
+            privateCar.setType(1);
+            privateCar.setIsReassign(1);
+            privateCar.setReassignNotice(0);
+            privateCar.setSubstitute(0);
+            privateCar.setOrderSource(5);
+            privateCar.setPlacementAddress(ToolUtil.formatting(privateCar.getStartAddress()));
+            privateCar.setPlacementLat(privateCar.getStartLat());
+            privateCar.setPlacementLon(privateCar.getStartLon());
+            privateCar.setStartAddress(ToolUtil.formatting(privateCar.getStartAddress()));
+            privateCar.setEndAddress(ToolUtil.formatting(privateCar.getEndAddress()));
+            ///   判断是否为预约单
+            long travelTime = privateCar.getTravelTime().getTime();
+            long momengtTime = new Date().getTime();
+            if ((travelTime - momengtTime) > 10 * 60 * 1000) {
+                privateCar.setOrderType(2);
+            } else {
+                privateCar.setOrderType(1);
+            }
+            tOrderPrivateCarService.insert(privateCar);
+        } else {///  用户不是平台用户时
+            TUser tUser = new TUser();
+            tUser.setInsertTime(DateUtil.parseTime(DateUtil.getTime()));
+            tUser.setPhone(privateCar.getPassengersPhone());
+            tUser.setName(privateCar.getPassengers());
+            tUser.setNickName("PRIVATE" + String.valueOf(1000000 + userService.selectList(null).size() + 1).substring(1));
+            userService.insert(tUser);
+
+            ///  存入订单信息
+            privateCar.setOrderNum("PRIVATE" + String.valueOf(1000000 + tOrderPrivateCarService.selectList(null).size() + 1).substring(1));
+            privateCar.setUserId(tUser.getId());
+            privateCar.setState(1);
+            privateCar.setInsertTime(DateUtil.parseTime(DateUtil.getTime()));
+            privateCar.setOrderType(1);
+            privateCar.setType(1);
+            privateCar.setIsReassign(1);
+            privateCar.setReassignNotice(0);
+            privateCar.setSubstitute(0);
+            privateCar.setOrderSource(5);
+            privateCar.setPlacementAddress(ToolUtil.formatting(privateCar.getStartAddress()));
+            privateCar.setPlacementLat(privateCar.getStartLat());
+            privateCar.setPlacementLon(privateCar.getStartLon());
+            privateCar.setStartAddress(ToolUtil.formatting(privateCar.getStartAddress()));
+            privateCar.setEndAddress(ToolUtil.formatting(privateCar.getEndAddress()));
+
+            ///   判断是否为预约单
+            long travelTime = privateCar.getTravelTime().getTime();
+            long momengtTime = new Date().getTime();
+            if ((travelTime - momengtTime) > 10 * 60 * 1000) {
+                privateCar.setOrderType(2);
+            } else {
+                privateCar.setOrderType(1);
+            }
+            tOrderPrivateCarService.insert(privateCar);
+        }
+
+        //增加推送
+        Map<String, String> map = new HashMap<>();
+        map.put("orderId", privateCar.getId().toString());
+        map.put("orderType", "1");
+        String result = HttpRequestUtil.postRequest(PushURL.push_order, map);
+        System.out.println("添加订单推单调用结果:" + result);
+        return SUCCESS_TIP;
+    }
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TAbnormalOrderPayCarController.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TAbnormalOrderPayCarController.java
new file mode 100644
index 0000000..85f12bc
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TAbnormalOrderPayCarController.java
@@ -0,0 +1,183 @@
+package com.stylefeng.guns.modular.system.controller.specialTrain;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.beetl.ShiroExtUtil;
+import com.stylefeng.guns.core.common.constant.factory.PageFactory;
+import com.stylefeng.guns.core.util.DateUtil;
+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.*;
+import com.stylefeng.guns.modular.system.util.*;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
+import java.util.*;
+
+/**
+ * 快车订单控制器
+ *
+ * @author fengshuonan
+ * @Date 2020-09-02 17:28:59
+ */
+@Controller
+@RequestMapping("/abnormalPay")
+public class TAbnormalOrderPayCarController extends BaseController {
+
+    private String PREFIX = "/system/tAbnormalPayOrderCar/";
+
+
+    @Autowired
+    private TAbnormalPayOrderService tAbnormalPayOrderService;
+
+    @Autowired
+    private ShiroExtUtil shiroExtUtil;
+    
+    
+    /**
+     * 跳转到快车订单首页
+     */
+    @RequestMapping("")
+    public String index(Model model) {
+        return PREFIX + "tAbnormalOrder.html";
+    }
+
+    /**
+     * 获取快车订单列表
+     */
+    @RequestMapping(value = "/list")
+    @ResponseBody
+    public Object list(String insertTime,
+                       String orderNum,
+                       String userName,
+                       String userPhone,
+                       String passengers,
+                       String passengersPhone,
+                       Integer abnormalStatus
+    ) {
+        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(tAbnormalPayOrderService.list(beginTime,endTime,orderNum,userName,userPhone,passengers,passengersPhone,abnormalStatus,shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId()));
+        return super.packForBT(page);
+    }
+
+
+    @GetMapping("/export")
+    @ResponseBody
+    public void export(String insertTime,
+                       String orderNum,
+                       String userName,
+                       String userPhone,
+                       String passengers,
+                       String passengersPhone,
+                       Integer abnormalStatus, HttpServletRequest request, HttpServletResponse response) {
+        try {
+            String beginTime = null;
+            String endTime = null;
+            if (SinataUtil.isNotEmpty(insertTime)) {
+                String[] timeArray = insertTime.split(" - ");
+                beginTime = timeArray[0];
+                endTime = timeArray[1];
+            }
+            List<Map<String, Object>> list = tAbnormalPayOrderService.list(beginTime, endTime, orderNum, userName, userPhone, passengers, passengersPhone, abnormalStatus, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId());
+
+            // 表格数据【封装】
+            List<List<String>> dataList = new ArrayList<>();
+
+            //第一行显示【封装】
+            List<String> twoList = new ArrayList<String>();
+            twoList.add("总计:");
+            twoList.add(String.valueOf(list.size())+"条");
+            dataList.add(twoList);
+
+            // 列【封装】
+            List<String> shellList = new ArrayList<String>();
+            shellList.add("生成时间");
+            shellList.add("关联订单号");
+            shellList.add("支付金额");
+            shellList.add("支付状态");
+            shellList.add("支付时间");
+            shellList.add("用户昵称");
+            shellList.add("联系电话");
+            dataList.add(shellList);
+
+            for (Map<String,Object> object : list){
+                // 详细数据列【封装】
+                shellList = new ArrayList<String>();
+                if(SinataUtil.isNotEmpty(object.get("insertTime"))){
+                    shellList.add(DateUtil.formatDate(DateUtil.parse(object.get("insertTime").toString(),"YYYY-MM-dd HH:mm:ss.S"), "YYYY-MM-dd HH:mm:ss"));
+                }else{
+                    shellList.add("-");
+                }
+                if(SinataUtil.isNotEmpty(object.get("orderNum"))){
+                    shellList.add(object.get("orderNum").toString());
+                }else{
+                    shellList.add("-");
+                }
+                if(SinataUtil.isNotEmpty(object.get("payMoney"))){
+                    shellList.add(object.get("payMoney").toString());
+                }else {
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("payStatus"))){
+                    shellList.add(object.get("payStatus").toString().equals("1")?"未支付":"已支付");
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("payTime"))){
+                    shellList.add(DateUtil.formatDate(DateUtil.parse(object.get("payTime").toString(),"YYYY-MM-dd HH:mm:ss.S"), "YYYY-MM-dd HH:mm:ss"));
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("userName"))){
+                    shellList.add(object.get("userName").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("userPhone"))){
+                    shellList.add(object.get("userPhone").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                dataList.add(shellList);
+            }
+            try {
+                // 调用工具类进行导出
+                ExcelExportUtil.easySheet("追偿支付单导出记录"+DateUtil.formatDate(new Date(), "YYYYMMddHHmmss"), "追偿支付单导出记录", dataList,request, response);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderCrossCityController.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderCrossCityController.java
index c6bb2fa..f5fde46 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderCrossCityController.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderCrossCityController.java
@@ -7,6 +7,7 @@
 import com.stylefeng.guns.core.beetl.ShiroExtUtil;
 import com.stylefeng.guns.core.common.constant.factory.PageFactory;
 import com.stylefeng.guns.core.shiro.ShiroUser;
+import com.stylefeng.guns.core.util.DateUtil;
 import com.stylefeng.guns.core.util.SinataUtil;
 import com.stylefeng.guns.core.util.ToolUtil;
 import com.stylefeng.guns.modular.system.controller.general.TDriverController;
@@ -15,10 +16,7 @@
 import com.stylefeng.guns.modular.system.dao.OrderCancelMapper;
 import com.stylefeng.guns.modular.system.model.*;
 import com.stylefeng.guns.modular.system.service.*;
-import com.stylefeng.guns.modular.system.util.HttpRequestUtil;
-import com.stylefeng.guns.modular.system.util.PayMoneyUtil;
-import com.stylefeng.guns.modular.system.util.PushURL;
-import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.util.*;
 import org.apache.commons.lang.time.DateFormatUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -31,11 +29,10 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 跨城出行订单控制器
@@ -146,7 +143,10 @@
                        Integer serverCarModelId,
                        String driver,
                        Integer lineId,
-                       Integer state) {
+                       Integer state,
+                       Integer abnormal,
+                       Integer promotion,
+                       String promotionUser) {
         String beginTime = null;
         String endTime = null;
         if (SinataUtil.isNotEmpty(insertTime)){
@@ -155,10 +155,276 @@
             endTime = timeArray[1];
         }
         Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
-        page.setRecords(tOrderCrossCityService.getCrossCityOrderList(page, beginTime, endTime, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(), orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, lineId, state));
+        page.setRecords(tOrderCrossCityService.getCrossCityOrderList(page, beginTime, endTime, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(), orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, lineId, state, abnormal, promotion, promotionUser,null));
         return super.packForBT(page);
     }
 
+
+
+    @GetMapping("/export")
+    @ResponseBody
+    public void export(String insertTime,
+                       String orderNum,
+                       Integer orderSource,
+                       String userName,
+                       String userPhone,
+                       String passengers,
+                       String passengersPhone,
+                       Integer serverCarModelId,
+                       String driver,
+                       Integer lineId,
+                       Integer state,
+                       Integer abnormal,
+                       Integer promotion,
+                       String promotionUser, HttpServletRequest request, HttpServletResponse response) {
+        try {
+            String beginTime = null;
+            String endTime = null;
+            if (SinataUtil.isNotEmpty(insertTime)) {
+                String[] timeArray = insertTime.split(" - ");
+                beginTime = timeArray[0];
+                endTime = timeArray[1];
+            }
+            List<Map<String, Object>> list = tOrderCrossCityService.getCrossCityOrderListExport(null, beginTime, endTime, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(), orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, lineId, state, abnormal, promotion, promotionUser,null);
+
+            // 表格数据【封装】
+            List<List<String>> dataList = new ArrayList<>();
+
+            //第一行显示【封装】
+            List<String> twoList = new ArrayList<String>();
+            twoList.add("总计:");
+            twoList.add(String.valueOf(list.size())+"条");
+            dataList.add(twoList);
+
+            // 列【封装】
+            List<String> shellList = new ArrayList<String>();
+            shellList.add("下单时间");
+            shellList.add("订单编号");
+            shellList.add("订单来源");
+            shellList.add("乘车时间");
+            shellList.add("下单用户昵称");
+            shellList.add("下单用户手机");
+            shellList.add("乘车用户姓名");
+            shellList.add("乘车用户手机");
+            shellList.add("起点");
+            shellList.add("终点");
+            shellList.add("线路名称");
+            shellList.add("选择车型");
+            shellList.add("接单司机");
+            shellList.add("接单车辆");
+            shellList.add("订单金额");
+            shellList.add("状态");
+            shellList.add("是否异常订单");
+            shellList.add("是否推广订单");
+            shellList.add("推广员姓名");
+            shellList.add("推广员电话");
+            dataList.add(shellList);
+
+            for (Map<String,Object> object : list){
+                // 详细数据列【封装】
+                shellList = new ArrayList<String>();
+                if(SinataUtil.isNotEmpty(object.get("insertTime"))){
+                    shellList.add(DateUtil.formatDate(DateUtil.parse(object.get("insertTime").toString(),"YYYY-MM-dd HH:mm:ss.S"), "YYYY-MM-dd HH:mm:ss"));
+                }else{
+                    shellList.add("-");
+                }
+                if(SinataUtil.isNotEmpty(object.get("orderNum"))){
+                    shellList.add(object.get("orderNum").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                // 1:APP下单,2:扫码下单,3:小程序下单,4:司机下单,5:调度下单
+                if(SinataUtil.isNotEmpty(object.get("orderSource"))){
+                    switch (object.get("orderSource").toString()){
+                        case "1":
+                            shellList.add("APP下单");
+                            break;
+                        case "2":
+                            shellList.add("扫码下单");
+                            break;
+                        case "3":
+                            shellList.add("小程序下单");
+                            break;
+                        case "4":
+                            shellList.add("司机下单");
+                            break;
+                        case "5":
+                            shellList.add("调度下单");
+                            break;
+                        case "6":
+                            shellList.add("道行龙城下单");
+                            break;
+                        default:
+                            shellList.add("-");
+                            break;
+                    }
+
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("travelTime"))){
+                    shellList.add(DateUtil.formatDate(DateUtil.parse(object.get("travelTime").toString(),"YYYY-MM-dd HH:mm:ss.S"), "YYYY-MM-dd HH:mm:ss"));
+                }else{
+                    shellList.add("-");
+                }
+
+
+                if(SinataUtil.isNotEmpty(object.get("userName"))){
+                    shellList.add(object.get("userName").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("userPhone"))){
+                    shellList.add(object.get("userPhone").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("passengers"))){
+                    shellList.add(object.get("passengers").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("passengersPhone"))){
+                    shellList.add(object.get("passengersPhone").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("contactPersonPhone"))){
+                    shellList.add(object.get("contactPersonPhone").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("startAddress"))){
+                    shellList.add(object.get("startAddress").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("endAddress"))){
+                    shellList.add(object.get("endAddress").toString());
+                }else{
+                    shellList.add("-");
+                }
+                if(SinataUtil.isNotEmpty(object.get("lineName"))){
+                    shellList.add(object.get("lineName").toString());
+                }else{
+                    shellList.add("-");
+                }
+                if(SinataUtil.isNotEmpty(object.get("serverCarModelName"))){
+                    shellList.add(object.get("serverCarModelName").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("driver"))){
+                    shellList.add(object.get("driver").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("car"))){
+                    shellList.add(object.get("car").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("orderMoney"))){
+                    shellList.add(object.get("orderMoney").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                // 1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付
+                if(SinataUtil.isNotEmpty(object.get("state"))){
+                    switch (object.get("state").toString()){
+                        case "1":
+                            shellList.add("待接单");
+                            break;
+                        case "2":
+                            shellList.add("待出发");
+                            break;
+                        case "3":
+                            shellList.add("待到达预约地点");
+                            break;
+                        case "4":
+                            shellList.add("待乘客上车");
+                            break;
+                        case "5":
+                            shellList.add("服务中");
+                            break;
+                        case "6":
+                            shellList.add("完成服务");
+                            break;
+                        case "7":
+                            shellList.add("待支付");
+                            break;
+                        case "8":
+                            shellList.add("待评价");
+                            break;
+                        case "9":
+                            shellList.add("已完成");
+                            break;
+                        case "10":
+                            shellList.add("已取消");
+                            break;
+                        case "11":
+                            shellList.add("改派中");
+                            break;
+                        case "12":
+                            shellList.add("取消待支付");
+                            break;
+                        default:
+                            shellList.add("-");
+                            break;
+                    }
+                }
+
+
+                if(SinataUtil.isNotEmpty(object.get("abnormal"))){
+                    shellList.add(object.get("abnormal").toString().equals("1")?"否":"是");
+                }else{
+                    shellList.add("-");
+                }
+
+
+                if(SinataUtil.isNotEmpty(object.get("promotion"))){
+                    shellList.add(object.get("promotion").toString().equals("1")?"否":"是");
+                }else{
+                    shellList.add("-");
+                }
+
+
+                if(SinataUtil.isNotEmpty(object.get("promotionUser"))){
+                    shellList.add(object.get("promotionUser").toString());
+                }else{
+                    shellList.add("-");
+                }
+                if(SinataUtil.isNotEmpty(object.get("promotionPhone"))){
+                    shellList.add(object.get("promotionPhone").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+
+                dataList.add(shellList);
+            }
+            try {
+                // 调用工具类进行导出
+                ExcelExportUtil.easySheet("订单导出记录"+DateUtil.formatDate(new Date(), "YYYYMMddHHmmss"), "订单导出记录", dataList,request, response);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
     @Autowired
     private ITDriverService tDriverService;
 
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java
index 6fc6664..63bf04a 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java
@@ -12,10 +12,7 @@
 import com.stylefeng.guns.modular.system.dao.OrderCancelMapper;
 import com.stylefeng.guns.modular.system.model.*;
 import com.stylefeng.guns.modular.system.service.*;
-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 com.stylefeng.guns.modular.system.util.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.domain.Sort;
@@ -27,6 +24,8 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.*;
 
 /**
@@ -127,7 +126,11 @@
                        Integer serverCarModelId,
                        String driver,
                        Integer state,
-                       Integer rideType) {
+                       Integer rideType,
+                       Integer abnormal,
+                       Integer promotion,
+                       String promotionUser
+    ) {
         String beginTime = null;
         String endTime = null;
         if (SinataUtil.isNotEmpty(insertTime)) {
@@ -137,10 +140,300 @@
         }
         Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
         page.setRecords(tOrderPrivateCarService.getPrivateCarOrderList(page, beginTime, endTime, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(),
-                orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state, rideType));
+                orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state, rideType, abnormal, promotion, promotionUser,null));
         return super.packForBT(page);
     }
-    
+
+
+    @GetMapping("/export")
+    @ResponseBody
+    public void export(String insertTime,
+                       String orderNum,
+                       Integer orderSource,
+                       String userName,
+                       String userPhone,
+                       String passengers,
+                       String passengersPhone,
+                       Integer serverCarModelId,
+                       String driver,
+                       Integer state,
+                       Integer rideType,
+                       Integer abnormal,
+                       Integer promotion,
+                       String promotionUser, HttpServletRequest request, HttpServletResponse response) {
+        try {
+            String beginTime = null;
+            String endTime = null;
+            if (SinataUtil.isNotEmpty(insertTime)) {
+                String[] timeArray = insertTime.split(" - ");
+                beginTime = timeArray[0];
+                endTime = timeArray[1];
+            }
+            List<Map<String, Object>> list = tOrderPrivateCarService.getPrivateCarOrderListExport(null, beginTime, endTime, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(),
+                    orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state, rideType, abnormal, promotion, promotionUser,null);
+
+            // 表格数据【封装】
+            List<List<String>> dataList = new ArrayList<>();
+
+            //第一行显示【封装】
+            List<String> twoList = new ArrayList<String>();
+            twoList.add("总计:");
+            twoList.add(String.valueOf(list.size())+"条");
+            dataList.add(twoList);
+
+            // 列【封装】
+            List<String> shellList = new ArrayList<String>();
+            shellList.add("下单时间");
+            shellList.add("订单编号");
+            shellList.add("订单来源");
+            shellList.add("订单类型");
+            shellList.add("乘车时间");
+            shellList.add("下单用户昵称");
+            shellList.add("下单用户手机");
+            shellList.add("乘车用户姓名");
+            shellList.add("乘车用户手机");
+            shellList.add("起点");
+            shellList.add("终点");
+            shellList.add("选择车型");
+            shellList.add("接单司机");
+            shellList.add("接单车辆");
+            shellList.add("订单金额");
+            shellList.add("状态");
+            shellList.add("是否异常订单");
+            shellList.add("是否推广订单");
+            shellList.add("推广员姓名");
+            shellList.add("推广员电话");
+            dataList.add(shellList);
+
+            for (Map<String,Object> object : list){
+                // 详细数据列【封装】
+                shellList = new ArrayList<String>();
+                if(SinataUtil.isNotEmpty(object.get("insertTime"))){
+                    shellList.add(DateUtil.formatDate(DateUtil.parse(object.get("insertTime").toString(),"YYYY-MM-dd HH:mm:ss.S"), "YYYY-MM-dd HH:mm:ss"));
+                }else{
+                    shellList.add("-");
+                }
+                if(SinataUtil.isNotEmpty(object.get("orderNum"))){
+                    shellList.add(object.get("orderNum").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                // 1:APP下单,2:扫码下单,3:小程序下单,4:司机下单,5:调度下单
+                if(SinataUtil.isNotEmpty(object.get("orderSource"))){
+                    switch (object.get("orderSource").toString()){
+                        case "1":
+                            shellList.add("APP下单");
+                            break;
+                        case "2":
+                            shellList.add("扫码下单");
+                            break;
+                        case "3":
+                            shellList.add("小程序下单");
+                            break;
+                        case "4":
+                            shellList.add("司机下单");
+                            break;
+                        case "5":
+                            shellList.add("调度下单");
+                            break;
+                        case "6":
+                            shellList.add("道行龙城下单");
+                            break;
+                        default:
+                            shellList.add("-");
+                            break;
+                    }
+
+                }
+                if(SinataUtil.isNotEmpty(object.get("rideType"))){
+                    switch (object.get("rideType").toString()){
+                        case "1":
+                            shellList.add("独享订单");
+                            break;
+                        case "2":
+                            shellList.add("一口价订单");
+                            break;
+                        case "3":
+                            shellList.add("拼车订单");
+                            break;
+                        default:
+                            shellList.add("-");
+                            break;
+                    }
+
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("travelTime"))){
+                    shellList.add(DateUtil.formatDate(DateUtil.parse(object.get("travelTime").toString(),"YYYY-MM-dd HH:mm:ss.S"), "YYYY-MM-dd HH:mm:ss"));
+                }else{
+                    shellList.add("-");
+                }
+
+
+                if(SinataUtil.isNotEmpty(object.get("userName"))){
+                    shellList.add(object.get("userName").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("userPhone"))){
+                    shellList.add(object.get("userPhone").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("passengers"))){
+                    shellList.add(object.get("passengers").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("passengersPhone"))){
+                    shellList.add(object.get("passengersPhone").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("contactPersonPhone"))){
+                    shellList.add(object.get("contactPersonPhone").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("startAddress"))){
+                    shellList.add(object.get("startAddress").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("endAddress"))){
+                    shellList.add(object.get("endAddress").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("serverCarModelName"))){
+                    shellList.add(object.get("serverCarModelName").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+
+
+                if(SinataUtil.isNotEmpty(object.get("driver"))){
+                    shellList.add(object.get("driver").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("car"))){
+                    shellList.add(object.get("car").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("orderMoney"))){
+                    shellList.add(object.get("orderMoney").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                // 1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付
+                if(SinataUtil.isNotEmpty(object.get("state"))){
+                    switch (object.get("state").toString()){
+                        case "1":
+                            shellList.add("待接单");
+                            break;
+                        case "2":
+                            shellList.add("待出发");
+                            break;
+                        case "3":
+                            shellList.add("待到达预约地点");
+                            break;
+                        case "4":
+                            shellList.add("待乘客上车");
+                            break;
+                        case "5":
+                            shellList.add("服务中");
+                            break;
+                        case "6":
+                            shellList.add("完成服务");
+                            break;
+                        case "7":
+                            shellList.add("待支付");
+                            break;
+                        case "8":
+                            shellList.add("待评价");
+                            break;
+                        case "9":
+                            shellList.add("已完成");
+                            break;
+                        case "10":
+                            shellList.add("已取消");
+                            break;
+                        case "11":
+                            shellList.add("改派中");
+                            break;
+                        case "12":
+                            shellList.add("取消待支付");
+                            break;
+                        default:
+                            shellList.add("-");
+                            break;
+                    }
+                }
+
+
+                if(SinataUtil.isNotEmpty(object.get("abnormal"))){
+                    shellList.add(object.get("abnormal").toString().equals("1")?"否":"是");
+                }else{
+                    shellList.add("-");
+                }
+
+
+                if(SinataUtil.isNotEmpty(object.get("promotion"))){
+                    shellList.add(object.get("promotion").toString().equals("1")?"否":"是");
+                }else{
+                    shellList.add("-");
+                }
+
+
+                if(SinataUtil.isNotEmpty(object.get("promotionUser"))){
+                    shellList.add(object.get("promotionUser").toString());
+                }else{
+                    shellList.add("-");
+                }
+                if(SinataUtil.isNotEmpty(object.get("promotionPhone"))){
+                    shellList.add(object.get("promotionPhone").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+
+                dataList.add(shellList);
+            }
+            try {
+                // 调用工具类进行导出
+                ExcelExportUtil.easySheet("订单导出记录"+DateUtil.formatDate(new Date(), "YYYYMMddHHmmss"), "订单导出记录", dataList,request, response);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+
+
+
+
+
+
+
+
+
     private ResultUtil resultUtil;
     
     /**
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/taxi/TOrderTaxiController.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/taxi/TOrderTaxiController.java
index c7d26e2..4cb9062 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/taxi/TOrderTaxiController.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/taxi/TOrderTaxiController.java
@@ -14,6 +14,7 @@
 import com.stylefeng.guns.modular.system.model.TOrderTaxi;
 import com.stylefeng.guns.modular.system.model.TUser;
 import com.stylefeng.guns.modular.system.service.*;
+import com.stylefeng.guns.modular.system.util.ExcelExportUtil;
 import com.stylefeng.guns.modular.system.util.HttpRequestUtil;
 import com.stylefeng.guns.modular.system.util.PushURL;
 import com.stylefeng.guns.modular.system.util.ResultUtil;
@@ -28,6 +29,8 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.*;
 
 /**
@@ -141,7 +144,10 @@
                        String passengers,
                        String passengersPhone,
                        String driver,
-                       Integer state) {
+                       Integer state,
+                       Integer abnormal,
+                       Integer promotion,
+                       String promotionUser) {
         String beginTime = null;
         String endTime = null;
         if (SinataUtil.isNotEmpty(insertTime)) {
@@ -150,10 +156,269 @@
             endTime = timeArray[1];
         }
         Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
-        page.setRecords(tOrderTaxiService.getTaxiOrderList(page, beginTime, endTime, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(), orderNum, orderSource, userName, userPhone, passengers, passengersPhone, driver, state));
+        page.setRecords(tOrderTaxiService.getTaxiOrderList(page, beginTime, endTime, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(), orderNum, orderSource, userName, userPhone, passengers, passengersPhone, driver, state, abnormal, promotion, promotionUser,null));
         return super.packForBT(page);
     }
 
+
+
+    @GetMapping("/export")
+    @ResponseBody
+    public void export(String insertTime,
+                       String orderNum,
+                       Integer orderSource,
+                       String userName,
+                       String userPhone,
+                       String passengers,
+                       String passengersPhone,
+                       String driver,
+                       Integer state,
+                       Integer abnormal,
+                       Integer promotion,
+                       String promotionUser, HttpServletRequest request, HttpServletResponse response) {
+        try {
+            String beginTime = null;
+            String endTime = null;
+            if (SinataUtil.isNotEmpty(insertTime)) {
+                String[] timeArray = insertTime.split(" - ");
+                beginTime = timeArray[0];
+                endTime = timeArray[1];
+            }
+
+            List<Map<String, Object>> list = tOrderTaxiService.getTaxiOrderListExport(null, beginTime, endTime, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(), orderNum, orderSource, userName, userPhone, passengers, passengersPhone, driver, state, abnormal, promotion, promotionUser,null);
+
+            // 表格数据【封装】
+            List<List<String>> dataList = new ArrayList<>();
+
+            //第一行显示【封装】
+            List<String> twoList = new ArrayList<String>();
+            twoList.add("总计:");
+            twoList.add(String.valueOf(list.size())+"条");
+            dataList.add(twoList);
+
+            // 列【封装】
+            List<String> shellList = new ArrayList<String>();
+            shellList.add("下单时间");
+            shellList.add("订单编号");
+            shellList.add("订单来源");
+            shellList.add("乘车时间");
+            shellList.add("下单用户昵称");
+            shellList.add("下单用户手机");
+            shellList.add("乘车用户姓名");
+            shellList.add("乘车用户手机");
+            shellList.add("联系人手机");
+            shellList.add("起点");
+            shellList.add("终点");
+            shellList.add("接单司机");
+            shellList.add("接单车辆");
+            shellList.add("订单金额");
+            shellList.add("状态");
+            shellList.add("是否异常订单");
+            shellList.add("是否推广订单");
+            shellList.add("推广员姓名");
+            shellList.add("推广员电话");
+            dataList.add(shellList);
+
+            for (Map<String,Object> object : list){
+                // 详细数据列【封装】
+                shellList = new ArrayList<String>();
+                if(SinataUtil.isNotEmpty(object.get("insertTime"))){
+                    shellList.add(DateUtil.formatDate(DateUtil.parse(object.get("insertTime").toString(),"YYYY-MM-dd HH:mm:ss.S"), "YYYY-MM-dd HH:mm:ss"));
+                }else{
+                    shellList.add("-");
+                }
+                if(SinataUtil.isNotEmpty(object.get("orderNum"))){
+                    shellList.add(object.get("orderNum").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                // 1:APP下单,2:扫码下单,3:小程序下单,4:司机下单,5:调度下单
+                if(SinataUtil.isNotEmpty(object.get("orderSource"))){
+                    switch (object.get("orderSource").toString()){
+                        case "1":
+                            shellList.add("APP下单");
+                            break;
+                        case "2":
+                            shellList.add("扫码下单");
+                            break;
+                        case "3":
+                            shellList.add("小程序下单");
+                            break;
+                        case "4":
+                            shellList.add("司机下单");
+                            break;
+                        case "5":
+                            shellList.add("调度下单");
+                            break;
+                        case "6":
+                            shellList.add("道行龙城下单");
+                            break;
+                            default:
+                            shellList.add("-");
+                            break;
+                    }
+
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("travelTime"))){
+                    shellList.add(DateUtil.formatDate(DateUtil.parse(object.get("travelTime").toString(),"YYYY-MM-dd HH:mm:ss.S"), "YYYY-MM-dd HH:mm:ss"));
+                }else{
+                    shellList.add("-");
+                }
+
+
+                if(SinataUtil.isNotEmpty(object.get("userName"))){
+                    shellList.add(object.get("userName").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("userPhone"))){
+                    shellList.add(object.get("userPhone").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("passengers"))){
+                    shellList.add(object.get("passengers").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("passengersPhone"))){
+                    shellList.add(object.get("passengersPhone").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("contactPersonPhone"))){
+                    shellList.add(object.get("contactPersonPhone").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("startAddress"))){
+                    shellList.add(object.get("startAddress").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("endAddress"))){
+                    shellList.add(object.get("endAddress").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("driver"))){
+                    shellList.add(object.get("driver").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("car"))){
+                    shellList.add(object.get("car").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                if(SinataUtil.isNotEmpty(object.get("orderMoney"))){
+                    shellList.add(object.get("orderMoney").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+                // 1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付
+                if(SinataUtil.isNotEmpty(object.get("state"))){
+                    switch (object.get("state").toString()){
+                        case "1":
+                            shellList.add("待接单");
+                            break;
+                        case "2":
+                            shellList.add("待出发");
+                            break;
+                        case "3":
+                            shellList.add("待到达预约地点");
+                            break;
+                        case "4":
+                            shellList.add("待乘客上车");
+                            break;
+                        case "5":
+                            shellList.add("服务中");
+                            break;
+                            case "6":
+                            shellList.add("完成服务");
+                            break;
+                            case "7":
+                            shellList.add("待支付");
+                            break;
+                            case "8":
+                            shellList.add("待评价");
+                            break;
+                            case "9":
+                            shellList.add("已完成");
+                            break;
+                            case "10":
+                            shellList.add("已取消");
+                            break;
+                            case "11":
+                            shellList.add("改派中");
+                            break;
+                            case "12":
+                            shellList.add("取消待支付");
+                            break;
+                            default:
+                            shellList.add("-");
+                            break;
+                    }
+                }
+
+
+                if(SinataUtil.isNotEmpty(object.get("abnormal"))){
+                    shellList.add(object.get("abnormal").toString().equals("1")?"否":"是");
+                }else{
+                    shellList.add("-");
+                }
+
+
+                if(SinataUtil.isNotEmpty(object.get("promotion"))){
+                    shellList.add(object.get("promotion").toString().equals("1")?"否":"是");
+                }else{
+                    shellList.add("-");
+                }
+
+
+                if(SinataUtil.isNotEmpty(object.get("promotionUser"))){
+                    shellList.add(object.get("promotionUser").toString());
+                }else{
+                    shellList.add("-");
+                }
+                if(SinataUtil.isNotEmpty(object.get("promotionPhone"))){
+                    shellList.add(object.get("promotionPhone").toString());
+                }else{
+                    shellList.add("-");
+                }
+
+
+                dataList.add(shellList);
+            }
+            try {
+                // 调用工具类进行导出
+                ExcelExportUtil.easySheet("订单导出记录"+DateUtil.formatDate(new Date(), "YYYYMMddHHmmss"), "订单导出记录", dataList,request, response);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+
+
+
+
+
     /**
      * 选择司机列表
      */
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TAbnormalPayOrderMapper.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TAbnormalPayOrderMapper.java
new file mode 100644
index 0000000..109819f
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TAbnormalPayOrderMapper.java
@@ -0,0 +1,23 @@
+package com.stylefeng.guns.modular.system.dao;
+
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.TAbnormalPayOrder;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 追偿订单 Mapper 接口
+ * </p>
+ *
+ * @author administrator
+ * @since 2025-07-21
+ */
+public interface TAbnormalPayOrderMapper extends BaseMapper<TAbnormalPayOrder> {
+
+    List<Map<String, Object>> list(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("orderNum") String orderNum, @Param("userName") String userName, @Param("userPhone") String userPhone, @Param("passengers") String passengers, @Param("passengersPhone") String passengersPhone, @Param("abnormalStatus") Integer abnormalStatus, @Param("roleType") Integer roleType, @Param("objectId") Integer objectId);
+
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderCrossCityMapper.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderCrossCityMapper.java
index ab327bb..5a249f3 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderCrossCityMapper.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderCrossCityMapper.java
@@ -36,7 +36,30 @@
                                                    @Param("serverCarModelId") Integer serverCarModelId,
                                                    @Param("driver") String driver,
                                                    @Param("lineId") Integer lineId,
-                                                   @Param("state") Integer state);
+                                                   @Param("state") Integer state,
+                                                   @Param("abnormal") Integer abnormal,
+                                                   @Param("promotion") Integer promotion,
+                                                   @Param("promotionUser") String promotionUser,
+                                                   @Param("abnormalStatus") Integer abnormalStatus);
+    List<Map<String,Object>> getCrossCityOrderListExport(
+                                                   @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("lineId") Integer lineId,
+                                                   @Param("state") Integer state,
+                                                   @Param("abnormal") Integer abnormal,
+                                                   @Param("promotion") Integer promotion,
+                                                   @Param("promotionUser") String promotionUser,
+                                                   @Param("abnormalStatus") Integer abnormalStatus);
 
     /**
      * 根据跨城出行订单ID获取跨城出行订单详情
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderPrivateCarMapper.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderPrivateCarMapper.java
index bcc1290..9d1908d 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderPrivateCarMapper.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderPrivateCarMapper.java
@@ -36,7 +36,30 @@
                                                     @Param("serverCarModelId") Integer serverCarModelId,
                                                     @Param("driver") String driver,
                                                     @Param("state") Integer state,
-                                                    @Param("rideType") Integer rideType);
+                                                    @Param("rideType") Integer rideType,
+                                                    @Param("abnormal") Integer abnormal,
+                                                    @Param("promotion") Integer promotion,
+                                                    @Param("promotionUser") String promotionUser,
+                                                    @Param("abnormalStatus") Integer abnormalStatus);
+    List<Map<String,Object>> getPrivateCarOrderListExport(
+                                                    @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,
+                                                    @Param("rideType") Integer rideType,
+                                                    @Param("abnormal") Integer abnormal,
+                                                    @Param("promotion") Integer promotion,
+                                                    @Param("promotionUser") String promotionUser,
+                                                    @Param("abnormalStatus") Integer abnormalStatus);
 
     /**
      * 根据快车订单ID获取快车订单详情
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderTaxiMapper.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderTaxiMapper.java
index 6ff48cd..1b09375 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderTaxiMapper.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderTaxiMapper.java
@@ -23,18 +23,39 @@
      * @return
      */
     List<Map<String,Object>> getTaxiOrderList(@Param("page") Page<Map<String, Object>> page,
-                                               @Param("beginTime") String beginTime,
-                                               @Param("endTime") String endTime,
+                                              @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("driver") String driver,
-                                               @Param("state") Integer state);
+                                              @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("driver") String driver,
+                                              @Param("state") Integer state,
+                                              @Param("abnormal") Integer abnormal,
+                                              @Param("promotion") Integer promotion,
+                                              @Param("promotionUser") String promotionUser,
+                                              @Param("abnormalStatus") Integer abnormalStatus);
+    List<Map<String,Object>> getTaxiOrderListExport(
+                                              @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("driver") String driver,
+                                              @Param("state") Integer state,
+                                              @Param("abnormal") Integer abnormal,
+                                              @Param("promotion") Integer promotion,
+                                              @Param("promotionUser") String promotionUser,
+                                              @Param("abnormalStatus") Integer abnormalStatus);
 
     /**
      * 根据出租车订单ID获取出租车订单详情
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RoleMapper.xml b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RoleMapper.xml
index b514734..14aa1cb 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RoleMapper.xml
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RoleMapper.xml
@@ -20,7 +20,7 @@
 	<select id="selectRoles" resultType="map">
 		select rr.*,(SELECT COUNT(id) from sys_user where FIND_IN_SET(rr.id,roleid)) as userCount
 		from sys_role as rr where 1 = 1
-		<if test="condition != null">
+		<if test="condition != null and condition !=''">
 			and rr.name like CONCAT('%',#{condition},'%')
 		</if>
 		<if test="null != objectId">
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TAbnormalPayOrderMapper.xml b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TAbnormalPayOrderMapper.xml
new file mode 100644
index 0000000..132fdf1
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TAbnormalPayOrderMapper.xml
@@ -0,0 +1,39 @@
+<?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.TAbnormalPayOrderMapper">
+
+
+    <select id="list" resultType="java.util.Map">
+        select o.id,o.createTime, o.orderNum, t2.nickName userName, t2.phone userPhone, o.passengers, o.passengersPhone, o.payStatus, o.payTime, o.payMoney, o.insertTime, o.companyId
+        from t_abnormal_pay_order o left join  t_user t2 on o.userId = t2.id
+        where 1=1
+        <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="userName != null and userName != ''">
+            and t2.nickName  LIKE CONCAT('%',#{userName},'%')
+        </if>
+        <if test="userPhone != null and userPhone != ''">
+            and t2.phone  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="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>
+        <if test="null != abnormalStatus">
+            and o.payStatus = #{abnormalStatus}
+        </if>
+    </select>
+
+</mapper>
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderCrossCityMapper.xml b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderCrossCityMapper.xml
index 5b182e3..3176efc 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderCrossCityMapper.xml
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderCrossCityMapper.xml
@@ -69,7 +69,73 @@
     <sql id="Base_Column_List">
         id, userId, driverId, lineId, carId, serverCarModelId, orderNum, placementLon, placementLat, placementAddress, startLon, startLat, endLon, startAddress, endLat, endAddress, boardingLon, boardingLat, boardingAddress, boardingTime, getoffLon, getoffLat, getoffAddress, getoffTime, mileage, payManner, payType, orderMoney, redPacketMoney, couponMoney, redPacketId, couponId, discount, discountMoney, activityId, companyId, payMoney, passengers, passengersPhone, sort, insertTime, travelTime, snatchOrderTime, setOutTime, arriveTime, startServiceTime, endServiceTime, travelMode, orderSource, invoiceId, trackId, state, isDelete, telX, bindId
     </sql>
-
+    <select id="getCrossCityOrderListExport" resultType="java.util.Map">
+        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,ll.`name` as lineName,ot.* FROM t_order_cross_city 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
+        LEFT JOIN t_line as ll on ll.id = ot.lineId
+        ) as o
+        <where>
+            o.isDelete = 1
+            <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="lineId != null and lineId != ''">
+                and o.lineId = #{lineId}
+            </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>
+            <if test="null != abnormal">
+                and o.abnormal = #{abnormal}
+            </if>
+            <if test="null != promotion">
+                and o.promotion = #{promotion}
+            </if>
+            <if test="null != promotionUser and promotionUser!='' ">
+                and o.promotionUser =#{promotionUser}
+            </if>
+            <if test="null != abnormalStatus">
+                and o.abnormalStatus = #{abnormalStatus}
+            </if>
+        </where>
+        order by o.id desc
+    </select>
     <!--根据条件查询跨城出行订单列表-->
     <select id="getCrossCityOrderList" resultType="map" parameterType="com.baomidou.mybatisplus.plugins.Page">
         SELECT * FROM (
@@ -123,6 +189,18 @@
             <if test="roleType != null and roleType != '' and roleType == 3">
                 and o.companyId = #{nowUserId}
             </if>
+            <if test="null != abnormal">
+                and o.abnormal = #{abnormal}
+            </if>
+            <if test="null != promotion">
+                and o.promotion = #{promotion}
+            </if>
+            <if test="null != promotionUser and promotionUser!='' ">
+                and o.promotionUser =#{promotionUser}
+            </if>
+            <if test="null != abnormalStatus">
+                and o.abnormalStatus = #{abnormalStatus}
+            </if>
         </where>
         order by o.id desc
     </select>
@@ -142,7 +220,9 @@
         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,
+        when ot.payType = 3 then '余额'
+        when ot.payType = 4 then '云闪付'
+        else '预备金' end as payTypeStr,
         sc.`name` as serverCarModel,
         CONCAT(di.`name`,'-',di.phone) as driver,
         CONCAT(cb.`name`,'-',ci.carLicensePlate) as car,
@@ -237,4 +317,5 @@
             </foreach>
         </if>
     </select>
+
 </mapper>
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderPrivateCarMapper.xml b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderPrivateCarMapper.xml
index 7b0b63f..f0b5ae9 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderPrivateCarMapper.xml
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderPrivateCarMapper.xml
@@ -80,7 +80,71 @@
     <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="getPrivateCarOrderListExport" resultType="java.util.Map">
+        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 serverCarModelName,ot.* FROM t_order_private_car 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
+            <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>
+            <if test="null != rideType">
+                and o.rideType = #{rideType}
+            </if>
+            <if test="null != abnormal">
+                and o.abnormal = #{abnormal}
+            </if>
+            <if test="null != promotion">
+                and o.promotion = #{promotion}
+            </if>
+            <if test="null != promotionUser and promotionUser!='' ">
+                and o.promotionUser =#{promotionUser}
+            </if>
+            <if test="null != abnormalStatus">
+                and o.abnormalStatus = #{abnormalStatus}
+            </if>
+        </where>
+        order by o.id desc
+    </select>
     <!--根据条件查询快车订单列表-->
     <select id="getPrivateCarOrderList" 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,
@@ -132,6 +196,18 @@
             <if test="null != rideType">
                 and o.rideType = #{rideType}
             </if>
+            <if test="null != abnormal">
+                and o.abnormal = #{abnormal}
+            </if>
+            <if test="null != promotion">
+                and o.promotion = #{promotion}
+            </if>
+            <if test="null != promotionUser and promotionUser!='' ">
+                and o.promotionUser =#{promotionUser}
+            </if>
+            <if test="null != abnormalStatus">
+                and o.abnormalStatus = #{abnormalStatus}
+            </if>
         </where>
         order by o.id desc
     </select>
@@ -151,7 +227,9 @@
         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,
+        when ot.payType = 3 then '余额'
+        when ot.payType = 4 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,
@@ -180,4 +258,5 @@
         UNION ALL
         SELECT  IFNULL(amount,0) amount,b.`name`  FROM  t_order_additional_fee a   LEFT JOIN t_additional_fee b ON a.additionalFeeId=b.id  WHERE a.orderId=#{id} AND a.orderType=#{orderType} AND a.id>1 AND amount>0
     </select>
+
 </mapper>
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderTaxiMapper.xml b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderTaxiMapper.xml
index f5b36f8..32b7886 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderTaxiMapper.xml
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderTaxiMapper.xml
@@ -61,7 +61,64 @@
     <sql id="Base_Column_List">
         id, 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, travelMoney, parkMoney, roadTollMoney, tipMoney, redPacketMoney, couponMoney, redPacketId, couponId, companyId, payMoney, substitute, passengers, passengersPhone, state, insertTime, travelTime, snatchOrderTime, setOutTime, arriveTime, startServiceTime, endServiceTime, orderType, orderSource, invoiceId, isReassign
     </sql>
+    <select id="getTaxiOrderListExport" resultType="java.util.Map">
+        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,
+        ot.* FROM t_order_taxi 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) as o
+        <where>
+            o.isDelete = 1 and o.type = 1
+            <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="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>
 
+            <if test="null != abnormal">
+                and o.abnormal = #{abnormal}
+            </if>
+            <if test="null != promotion">
+                and o.promotion = #{promotion}
+            </if>
+            <if test="null != promotionUser and promotionUser!='' ">
+                and o.promotionUser =#{promotionUser}
+            </if>
+            <if test="null != abnormalStatus">
+                and o.abnormalStatus = #{abnormalStatus}
+            </if>
+        </where>
+        order by o.id desc
+    </select>
     <!--根据条件查询出租车订单列表-->
     <select id="getTaxiOrderList" 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,
@@ -105,6 +162,19 @@
             <if test="roleType != null and roleType != '' and roleType == 3">
                 and o.companyId = #{nowUserId}
             </if>
+
+            <if test="null != abnormal">
+                and o.abnormal = #{abnormal}
+            </if>
+            <if test="null != promotion">
+                and o.promotion = #{promotion}
+            </if>
+            <if test="null != promotionUser and promotionUser!='' ">
+                and o.promotionUser =#{promotionUser}
+            </if>
+            <if test="null != abnormalStatus">
+                and o.abnormalStatus = #{abnormalStatus}
+            </if>
         </where>
         order by o.id desc
     </select>
@@ -127,7 +197,7 @@
         when ot.payType = 2 then '支付宝'
         when ot.payType = 3 then '余额'
          when ot.payType = 4 then '云闪付'
-         else '' end as payTypeStr,
+         else '预备金' end as payTypeStr,
         CONCAT(di.`name`,'-',di.phone) as driver,
         CONCAT(cb.`name`,'-',ci.carLicensePlate) as car,
         cc.`name` as companyName,ot.*
@@ -1135,4 +1205,5 @@
         </if>
         ) as aa where aa.thankYouFee != 0 order by aa.insertTime desc
     </select>
+
 </mapper>
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TAbnormalPayOrder.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TAbnormalPayOrder.java
new file mode 100644
index 0000000..8f76ca3
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TAbnormalPayOrder.java
@@ -0,0 +1,82 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.enums.IdType;
+import java.math.BigDecimal;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+import com.baomidou.mybatisplus.annotations.Version;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 追偿订单
+ * </p>
+ *
+ * @author administrator
+ * @since 2025-07-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("t_abnormal_pay_order")
+public class TAbnormalPayOrder extends Model<TAbnormalPayOrder> {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 1快车 2跨城  3出租车 4顺风车
+     */
+    private Integer type;
+    /**
+     * 订单号
+     */
+    private String orderNum;
+    private Date createTime;
+    /**
+     * 下单人id
+     */
+    private Integer userId;
+    /**
+     * 1未支付 2已支付
+     */
+    private Integer payStatus;
+    /**
+     * 支付时间
+     */
+    private Date payTime;
+    /**
+     * 支付金额
+     */
+    private BigDecimal payMoney;
+    /**
+     * 乘车人
+     */
+    private String passengers;
+    /**
+     * 乘车人手机
+     */
+    private String passengersPhone;
+    private Date insertTime;
+    /**
+     * 公司id
+     */
+    private Integer companyId;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCrossCity.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCrossCity.java
index 63a9feb..f4e1444 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCrossCity.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCrossCity.java
@@ -298,6 +298,47 @@
 
     private String billNo;
 
+
+    private Integer abnormalStatus;
+
+    private Integer responsibilityType;
+
+    private BigDecimal responsibilityMoney;
+
+    private String abnormalRemark;
+
+    public Integer getAbnormalStatus() {
+        return abnormalStatus;
+    }
+
+    public void setAbnormalStatus(Integer abnormalStatus) {
+        this.abnormalStatus = abnormalStatus;
+    }
+
+    public String getAbnormalRemark() {
+        return abnormalRemark;
+    }
+
+    public void setAbnormalRemark(String abnormalRemark) {
+        this.abnormalRemark = abnormalRemark;
+    }
+
+    public BigDecimal getResponsibilityMoney() {
+        return responsibilityMoney;
+    }
+
+    public void setResponsibilityMoney(BigDecimal responsibilityMoney) {
+        this.responsibilityMoney = responsibilityMoney;
+    }
+
+    public Integer getResponsibilityType() {
+        return responsibilityType;
+    }
+
+    public void setResponsibilityType(Integer responsibilityType) {
+        this.responsibilityType = responsibilityType;
+    }
+
     public String getBillNo() {
         return billNo;
     }
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderPrivateCar.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderPrivateCar.java
index 97194c2..018d71a 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderPrivateCar.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderPrivateCar.java
@@ -336,6 +336,46 @@
     private String bindId;
 
 
+    private Integer abnormalStatus;
+
+    private Integer responsibilityType;
+
+    private BigDecimal responsibilityMoney;
+
+    private String abnormalRemark;
+
+    public Integer getAbnormalStatus() {
+        return abnormalStatus;
+    }
+
+    public void setAbnormalStatus(Integer abnormalStatus) {
+        this.abnormalStatus = abnormalStatus;
+    }
+
+    public Integer getResponsibilityType() {
+        return responsibilityType;
+    }
+
+    public void setResponsibilityType(Integer responsibilityType) {
+        this.responsibilityType = responsibilityType;
+    }
+
+    public BigDecimal getResponsibilityMoney() {
+        return responsibilityMoney;
+    }
+
+    public void setResponsibilityMoney(BigDecimal responsibilityMoney) {
+        this.responsibilityMoney = responsibilityMoney;
+    }
+
+    public String getAbnormalRemark() {
+        return abnormalRemark;
+    }
+
+    public void setAbnormalRemark(String abnormalRemark) {
+        this.abnormalRemark = abnormalRemark;
+    }
+
     public Integer getId() {
         return id;
     }
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderTaxi.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderTaxi.java
index 5ed74e6..d9648b9 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderTaxi.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderTaxi.java
@@ -304,6 +304,46 @@
     private String bindId;
 
 
+    private Integer abnormalStatus;
+
+    private Integer responsibilityType;
+
+    private BigDecimal responsibilityMoney;
+
+    public Integer getAbnormalStatus() {
+        return abnormalStatus;
+    }
+
+    public void setAbnormalStatus(Integer abnormalStatus) {
+        this.abnormalStatus = abnormalStatus;
+    }
+
+    public Integer getResponsibilityType() {
+        return responsibilityType;
+    }
+
+    public void setResponsibilityType(Integer responsibilityType) {
+        this.responsibilityType = responsibilityType;
+    }
+
+    public BigDecimal getResponsibilityMoney() {
+        return responsibilityMoney;
+    }
+
+    public void setResponsibilityMoney(BigDecimal responsibilityMoney) {
+        this.responsibilityMoney = responsibilityMoney;
+    }
+
+    public String getAbnormalRemark() {
+        return abnormalRemark;
+    }
+
+    public void setAbnormalRemark(String abnormalRemark) {
+        this.abnormalRemark = abnormalRemark;
+    }
+
+    private String abnormalRemark;
+
     public Integer getId() {
         return id;
     }
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderCrossCityService.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderCrossCityService.java
index 668551f..c1c7129 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderCrossCityService.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderCrossCityService.java
@@ -36,7 +36,30 @@
                                                    @Param("serverCarModelId") Integer serverCarModelId,
                                                    @Param("driver") String driver,
                                                    @Param("lineId") Integer lineId,
-                                                   @Param("state") Integer state);
+                                                   @Param("state") Integer state,
+                                                   Integer abnormal,
+                                                   Integer promotion,
+                                                   String promotionUser,
+                                                   Integer abnormalStatus);
+    List<Map<String,Object>> getCrossCityOrderListExport(@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("lineId") Integer lineId,
+                                                   @Param("state") Integer state,
+                                                   Integer abnormal,
+                                                   Integer promotion,
+                                                   String promotionUser,
+                                                   Integer abnormalStatus);
 
     /**
      * 根据跨城出行订单ID获取跨城出行订单详情
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderPrivateCarService.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderPrivateCarService.java
index 7477f5f..19f3cc3 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderPrivateCarService.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderPrivateCarService.java
@@ -36,7 +36,30 @@
                                                     @Param("serverCarModelId") Integer serverCarModelId,
                                                     @Param("driver") String driver,
                                                     @Param("state") Integer state,
-                                                    @Param("rideType") Integer rideType);
+                                                    @Param("rideType") Integer rideType,
+                                                    Integer abnormal,
+                                                    Integer promotion,
+                                                    String promotionUser,
+                                                    Integer abnormalStatus);
+    List<Map<String,Object>> getPrivateCarOrderListExport(@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,
+                                                    @Param("rideType") Integer rideType,
+                                                    Integer abnormal,
+                                                    Integer promotion,
+                                                    String promotionUser,
+                                                    Integer abnormalStatus);
 
     /**
      * 根据快车订单ID获取快车订单详情
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderTaxiService.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderTaxiService.java
index ac0eed8..1abd81a 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderTaxiService.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderTaxiService.java
@@ -36,7 +36,29 @@
                                               @Param("passengers") String passengers,
                                               @Param("passengersPhone") String passengersPhone,
                                               @Param("driver") String driver,
-                                              @Param("state") Integer state);
+                                              @Param("state") Integer state,
+                                              Integer abnormal,
+                                              Integer promotion,
+                                              String promotionUser,
+                                              Integer abnormalStatus);
+
+    List<Map<String,Object>> getTaxiOrderListExport(@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("driver") String driver,
+                                              @Param("state") Integer state,
+                                              Integer abnormal,
+                                              Integer promotion,
+                                              String promotionUser,
+                                              Integer abnormalStatus);
 
     /**
      * 根据出租车订单ID获取出租车订单详情
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/TAbnormalPayOrderService.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/TAbnormalPayOrderService.java
new file mode 100644
index 0000000..bc625f0
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/TAbnormalPayOrderService.java
@@ -0,0 +1,24 @@
+package com.stylefeng.guns.modular.system.service;
+
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.TAbnormalPayOrder;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 追偿订单 服务类
+ * </p>
+ *
+ * @author administrator
+ * @since 2025-07-21
+ */
+public interface TAbnormalPayOrderService extends IService<TAbnormalPayOrder> {
+
+    List<Map<String, Object>> list(String beginTime, String endTime, String orderNum, String userName, String userPhone, String passengers, String passengersPhone, Integer abnormalStatus, Integer roleType, Integer objectId);
+
+
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAbnormalPayOrderServiceImpl.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAbnormalPayOrderServiceImpl.java
new file mode 100644
index 0000000..cf2b6d5
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAbnormalPayOrderServiceImpl.java
@@ -0,0 +1,35 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.TAbnormalPayOrderMapper;
+import com.stylefeng.guns.modular.system.model.TAbnormalPayOrder;
+import com.stylefeng.guns.modular.system.service.TAbnormalPayOrderService;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 追偿订单 服务实现类
+ * </p>
+ *
+ * @author administrator
+ * @since 2025-07-21
+ */
+@Service
+public class TAbnormalPayOrderServiceImpl extends ServiceImpl<TAbnormalPayOrderMapper, TAbnormalPayOrder> implements TAbnormalPayOrderService {
+
+    @Override
+    public List<Map<String, Object>> list(String beginTime, String endTime, String orderNum, String userName, String userPhone, String passengers, String passengersPhone, Integer abnormalStatus, Integer roleType, Integer objectId) {
+
+        return this.baseMapper.list(beginTime,endTime,orderNum,userName,userPhone,passengers,passengersPhone,abnormalStatus,roleType,objectId);
+    }
+
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderCrossCityServiceImpl.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderCrossCityServiceImpl.java
index 248b9bb..8e6a715 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderCrossCityServiceImpl.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderCrossCityServiceImpl.java
@@ -27,8 +27,18 @@
     private TOrderCrossCityMapper orderCrossCityMapper;
 
     @Override
-    public List<Map<String, Object>> getCrossCityOrderList(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 lineId, Integer state) {
-        return this.baseMapper.getCrossCityOrderList(page, beginTime, endTime, roleType, nowUserId, orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, lineId, state);
+    public List<Map<String, Object>> getCrossCityOrderList(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 lineId, Integer state, Integer abnormal,
+                                                           Integer promotion,
+                                                           String promotionUser,
+                                                           Integer abnormalStatus) {
+        return this.baseMapper.getCrossCityOrderList(page, beginTime, endTime, roleType, nowUserId, orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, lineId, state, abnormal, promotion, promotionUser,abnormalStatus);
+    }
+    @Override
+    public List<Map<String, Object>> getCrossCityOrderListExport(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 lineId, Integer state, Integer abnormal,
+                                                           Integer promotion,
+                                                           String promotionUser,
+                                                           Integer abnormalStatus) {
+        return this.baseMapper.getCrossCityOrderListExport( beginTime, endTime, roleType, nowUserId, orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, lineId, state, abnormal, promotion, promotionUser,abnormalStatus);
     }
 
     @Override
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderPrivateCarServiceImpl.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderPrivateCarServiceImpl.java
index 12d3306..2db46d2 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderPrivateCarServiceImpl.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderPrivateCarServiceImpl.java
@@ -36,8 +36,36 @@
 
     @Override
     public List<Map<String, Object>> getPrivateCarOrderList(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, Integer rideType) {
-        List<Map<String, Object>> privateCarOrderList = this.baseMapper.getPrivateCarOrderList(page, beginTime, endTime, roleType, nowUserId, orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state, rideType);
+                                                            String userPhone, String passengers, String passengersPhone, Integer serverCarModelId, String driver, Integer state, Integer rideType, Integer abnormal,
+                                                            Integer promotion,
+                                                            String promotionUser,
+                                                            Integer abnormalStatus) {
+        List<Map<String, Object>> privateCarOrderList = this.baseMapper.getPrivateCarOrderList(page, beginTime, endTime, roleType, nowUserId, orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state, rideType, abnormal, promotion, promotionUser,abnormalStatus);
+        for (Map<String, Object> map : privateCarOrderList) {
+            if(null == map.get("serverCarModelName")){
+                JSONArray jsonArray = JSON.parseArray(map.get("serverCarModel").toString());
+                Set<Integer> ids = new HashSet<>();
+                for (int i = 0; i < jsonArray.size(); i++) {
+                    JSONObject jsonObject = jsonArray.getJSONObject(i);
+                    ids.add(jsonObject.getInteger("serverCarModelId"));
+                }
+                List<TServerCarmodel> serverCarmodels = serverCarmodelService.selectBatchIds(ids);
+                String collect = serverCarmodels.stream().map(TServerCarmodel::getName).collect(Collectors.joining("<br/>"));
+                if(ids.contains(0)){
+                    collect += ToolUtil.isNotEmpty(collect) ?  "<br/>出租车" : "出租车";
+                }
+                map.put("serverCarModelName", collect);
+            }
+        }
+        return privateCarOrderList;
+    }
+    @Override
+    public List<Map<String, Object>> getPrivateCarOrderListExport(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, Integer rideType, Integer abnormal,
+                                                            Integer promotion,
+                                                            String promotionUser,
+                                                            Integer abnormalStatus) {
+        List<Map<String, Object>> privateCarOrderList = this.baseMapper.getPrivateCarOrderListExport(beginTime, endTime, roleType, nowUserId, orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state, rideType, abnormal, promotion, promotionUser,abnormalStatus);
         for (Map<String, Object> map : privateCarOrderList) {
             if(null == map.get("serverCarModelName")){
                 JSONArray jsonArray = JSON.parseArray(map.get("serverCarModel").toString());
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderTaxiServiceImpl.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderTaxiServiceImpl.java
index 98a6e69..a7cbce9 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderTaxiServiceImpl.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderTaxiServiceImpl.java
@@ -55,11 +55,20 @@
     
     
     @Override
-    public List<Map<String, Object>> getTaxiOrderList(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, String driver, Integer state) {
-        return this.baseMapper.getTaxiOrderList(page, beginTime, endTime, roleType, nowUserId, orderNum, orderSource, userName, userPhone, passengers, passengersPhone, driver, state);
+    public List<Map<String, Object>> getTaxiOrderList(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, String driver, Integer state,Integer abnormal,
+                                                      Integer promotion,
+                                                      String promotionUser,Integer abnormalStatus) {
+        return this.baseMapper.getTaxiOrderList(page, beginTime, endTime, roleType, nowUserId, orderNum, orderSource, userName, userPhone, passengers, passengersPhone, driver, state, abnormal, promotion, promotionUser,abnormalStatus);
     }
     
     @Override
+    public List<Map<String, Object>> getTaxiOrderListExport(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, String driver, Integer state,Integer abnormal,
+                                                      Integer promotion,
+                                                      String promotionUser,Integer abnormalStatus) {
+        return this.baseMapper.getTaxiOrderListExport( beginTime, endTime, roleType, nowUserId, orderNum, orderSource, userName, userPhone, passengers, passengersPhone, driver, state, abnormal, promotion, promotionUser,abnormalStatus);
+    }
+
+    @Override
     public Map<String, Object> getTaxiOrderDetailById(Integer orderId) {
         return this.baseMapper.getTaxiOrderDetailById(orderId);
     }
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/CellType.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/CellType.java
new file mode 100644
index 0000000..7e094bd
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/CellType.java
@@ -0,0 +1,45 @@
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+package com.stylefeng.guns.modular.system.util;
+
+
+public enum CellType {
+    _NONE(-1),
+    NUMERIC(0),
+    STRING(1),
+    FORMULA(2),
+    BLANK(3),
+    BOOLEAN(4),
+    ERROR(5);
+
+    /** @deprecated */
+    private final int code;
+
+    /** @deprecated */
+    private CellType(int code) {
+        this.code = code;
+    }
+
+    /** @deprecated */
+    public static CellType forInt(int code) {
+        CellType[] var1 = values();
+        int var2 = var1.length;
+
+        for(int var3 = 0; var3 < var2; ++var3) {
+            CellType type = var1[var3];
+            if (type.code == code) {
+                return type;
+            }
+        }
+
+        throw new IllegalArgumentException("Invalid CellType code: " + code);
+    }
+
+    /** @deprecated */
+    public int getCode() {
+        return this.code;
+    }
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ExcelUtil.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ExcelUtil.java
new file mode 100644
index 0000000..9dc809e
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ExcelUtil.java
@@ -0,0 +1,351 @@
+//package com.stylefeng.guns.modular.system.util;
+//
+//import org.apache.poi.hssf.usermodel.*;
+//import org.apache.poi.ss.usermodel.*;
+//import org.apache.poi.ss.usermodel.DateUtil;
+//import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+//import org.springframework.stereotype.Component;
+//import org.springframework.web.multipart.MultipartFile;
+//
+//import java.io.IOException;
+//import java.io.InputStream;
+//import java.util.ArrayList;
+//import java.util.Date;
+//import java.util.List;
+//
+///**
+// * 定义Excel工具类
+// */
+//@Component
+//public class ExcelUtil {
+//
+//
+//    public List<List<List<String>>> upload(String s,MultipartFile file){
+//        InputStream inputStream = null;
+//        try {
+//            inputStream = file.getInputStream();
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//        //获取文件名
+//        String fileName=s;
+//        List<List<List<String>>> list = null;
+//        if(validateExcel(fileName)) {
+//            // 根据版本选择创建Workbook的方式
+//            Workbook wb = null;
+//            // 根据文件名判断文件是2003版本还是2007版本
+//            if (isExcel2007(fileName)) {
+//                try {
+//                    wb = new XSSFWorkbook(inputStream);
+//                } catch (IOException e) {
+//                    // TODO Auto-generated catch block
+//                    e.printStackTrace();
+//                }
+//            } else {
+//                try {
+//                    wb = new HSSFWorkbook(inputStream);
+//                } catch (IOException e) {
+//                    // TODO Auto-generated catch block
+//                    e.printStackTrace();
+//                }
+//            }
+//            int num = wb.getNumberOfSheets();//获取页数
+//            list = new ArrayList<>();
+//            for (int i = 0; i < num; i++) {
+//                List<List<String>> sheetList = new ArrayList<>();
+//                //获取每一页对象
+//                Sheet sheet = wb.getSheetAt(i);
+//                // 得到Excel的行数
+//                int totalRows = sheet.getPhysicalNumberOfRows();
+//                for (int j = 0; j < totalRows; j++) {
+//                    if (j == 0) {
+//                        continue;// 标题行
+//                    }
+//                    Row row = sheet.getRow(j);// 获取索引为i的行数据
+//                    if(null == row){
+//                        continue;
+//                    }
+//                    int index = sheet.getRow(0).getPhysicalNumberOfCells();//获取标题的列数用于遍历
+//                    List<String> strings = new ArrayList<>();
+//                    int in = 0;//用于遍历单元格判断该行是否全为空值
+//                    for (int k = 0; k < index; k++) {//遍历获取每个单元格的数据
+//                        String str = null;
+//                        Cell cell = row.getCell(k);
+//                        if(cell == null) {
+//                            str = "";
+//                            in++;
+//                        }else {
+//                            switch (cell.getCellType()) {//判断数据类型取值
+//                                case NUMERIC :
+//                                    if (DateUtil.isCellDateFormatted(cell)) {
+//                                        Date theDate = cell.getDateCellValue();
+//                                        str = String.valueOf(theDate.getTime());
+//                                    }else{
+//                                        String string = String.valueOf(cell.getNumericCellValue());
+//                                        str = string.substring(0, string.indexOf("."));
+//                                    }
+//
+//                                    break;
+//                                case STRING :
+//                                    str = cell.getStringCellValue();
+//                                    if(str == null) {
+//                                        str = "";
+//                                        in++;
+//                                    }
+//                                    break;
+//                                case _NONE :
+//                                    System.err.println("_NONE");
+//                                    break;
+//                                case FORMULA :
+//                                    System.err.println("FORMULA");
+//                                    break;
+//                                case BLANK :
+//                                    str = cell.getStringCellValue();
+//                                    if(str.equals("")) {
+//                                        str = "";
+//                                        in++;
+//                                    }
+//                                    break;
+//                                case BOOLEAN :
+//                                    System.err.println("BOOLEAN");
+//                                    break;
+//                                case ERROR :
+//                                    System.err.println("ERROR");
+//                                    break;
+//                                default:
+//                                    break;
+//                            }
+//                        }
+//                        strings.add(String.valueOf(str).trim());
+//                    }
+//
+//                    if(in != index) {//判断如果每个单元格都为null则不需要添加到集合中
+//                        sheetList.add(strings);
+//                    }
+//                }
+//                list.add(sheetList);
+//            }
+//
+//
+//        }
+//
+//        return list;
+//    }
+//
+//    public List<List<List<String>>> upload(MultipartFile file){
+//        InputStream inputStream = null;
+//        try {
+//            inputStream = file.getInputStream();
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//        //获取文件名
+//        String fileName=file.getOriginalFilename();
+//        List<List<List<String>>> list = null;
+//        if(validateExcel(fileName)) {
+//            // 根据版本选择创建Workbook的方式
+//            Workbook wb = null;
+//            // 根据文件名判断文件是2003版本还是2007版本
+//            if (isExcel2007(fileName)) {
+//                try {
+//                    wb = new XSSFWorkbook(inputStream);
+//                } catch (IOException e) {
+//                    // TODO Auto-generated catch block
+//                    e.printStackTrace();
+//                }
+//            } else {
+//                try {
+//                    wb = new HSSFWorkbook(inputStream);
+//                } catch (IOException e) {
+//                    // TODO Auto-generated catch block
+//                    e.printStackTrace();
+//                }
+//            }
+//            int num = wb.getNumberOfSheets();//获取页数
+//            list = new ArrayList<>();
+//            for (int i = 0; i < num; i++) {
+//                List<List<String>> sheetList = new ArrayList<>();
+//                //获取每一页对象
+//                Sheet sheet = wb.getSheetAt(i);
+//                // 得到Excel的行数
+//                int totalRows = sheet.getPhysicalNumberOfRows();
+//                for (int j = 0; j < totalRows; j++) {
+//                    if (j == 0) {
+//                        continue;// 标题行
+//                    }
+//                    Row row = sheet.getRow(j);// 获取索引为i的行数据
+//                    if(null == row){
+//                        continue;
+//                    }
+//                    int index = sheet.getRow(0).getPhysicalNumberOfCells();//获取标题的列数用于遍历
+//                    List<String> strings = new ArrayList<>();
+//                    int in = 0;//用于遍历单元格判断该行是否全为空值
+//                    for (int k = 0; k < index; k++) {//遍历获取每个单元格的数据
+//                        String str = null;
+//                        Cell cell = row.getCell(k);
+//                        if(cell == null) {
+//                            str = "";
+//                            in++;
+//                        }else {
+//                            switch (cell.getCellType()) {//判断数据类型取值
+//                                case NUMERIC :
+//                                    if (DateUtil.isCellDateFormatted(cell)) {
+//                                        Date theDate = cell.getDateCellValue();
+//                                        str = String.valueOf(theDate.getTime());
+//                                    }else{
+//                                        String string = String.valueOf(cell.getNumericCellValue());
+//                                        str = string.substring(0, string.indexOf("."));
+//                                    }
+//
+//                                    break;
+//                                case STRING :
+//                                    str = cell.getStringCellValue();
+//                                    if(str == null) {
+//                                        str = "";
+//                                        in++;
+//                                    }
+//                                    break;
+//                                case _NONE :
+//                                    System.err.println("_NONE");
+//                                    break;
+//                                case FORMULA :
+//                                    System.err.println("FORMULA");
+//                                    break;
+//                                case BLANK :
+//                                    str = cell.getStringCellValue();
+//                                    if(str.equals("")) {
+//                                        str = "";
+//                                        in++;
+//                                    }
+//                                    break;
+//                                case BOOLEAN :
+//                                    System.err.println("BOOLEAN");
+//                                    break;
+//                                case ERROR :
+//                                    System.err.println("ERROR");
+//                                    break;
+//                                default:
+//                                    break;
+//                            }
+//                        }
+//                        strings.add(String.valueOf(str).trim());
+//                    }
+//
+//                    if(in != index) {//判断如果每个单元格都为null则不需要添加到集合中
+//                        sheetList.add(strings);
+//                    }
+//                }
+//                list.add(sheetList);
+//            }
+//
+//
+//        }
+//
+//        return list;
+//    }
+//
+//
+//
+//    // @描述:是否是2003的excel,返回true是2003
+//    public static boolean isExcel2003(String filePath)  {
+//        return filePath.matches("^.+\\.(?i)(xls)$");
+//    }
+//
+//
+//    //@描述:是否是2007的excel,返回true是2007
+//    public static boolean isExcel2007(String filePath)  {
+//        return filePath.matches("^.+\\.(?i)(xlsx)$");
+//    }
+//
+//
+//    /**
+//     * 验证EXCEL文件
+//     * @param filePath
+//     * @return
+//     */
+//    public static boolean validateExcel(String filePath){
+//        if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))){
+//            return false;
+//        }
+//        return true;
+//    }
+//
+//
+//    /**
+//     * 将数据写入Excel中
+//     * @param titles    标题
+//     * @param datas     数据
+//     * @return
+//     */
+//    public HSSFWorkbook writeDataToExcel(List<List<String>> titles, List<List<List<String>>> datas) {
+//        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
+//
+//        for(int i = 0; i < titles.size(); i++){
+//            HSSFSheet hssfSheet = hssfWorkbook.createSheet();
+//            hssfSheet.setColumnWidth(0, 6 * 256);
+//            hssfSheet.setDefaultRowHeightInPoints(20f);
+//
+//            HSSFRow hssfRow = hssfSheet.createRow(0);//设置第一行数据(标题)
+//            HSSFCellStyle style = hssfWorkbook.createCellStyle();
+//            HSSFFont font = hssfWorkbook.createFont();
+//            font.setBold(true);
+//            style.setFont(font);
+//            style.setAlignment(HorizontalAlignment.CENTER);
+//            for (int l = 0; l < titles.get(i).size(); l++) {
+//                HSSFCell hssfCell = hssfRow.createCell(l);
+//                hssfCell.setCellType(CellType.STRING);//设置表格类型
+//                hssfCell.setCellValue(titles.get(i).get(l));
+//                hssfCell.setCellStyle(style);
+//                hssfSheet.setColumnWidth(l , 20 * 256);
+//            }
+//
+//            //将数据添加到表格中
+//            List<String> data = null;
+//            for (int l = 0; l < datas.get(i).size(); l++) {
+//                hssfRow = hssfSheet.createRow(l + 1);
+//                data = datas.get(i).get(l);
+//                for (int j = 0; j < data.size(); j++) {
+//                    HSSFCell hssfCell = hssfRow.createCell(j);
+//                    hssfCell.setCellType(CellType.STRING);//设置表格类型
+//                    hssfCell.setCellValue(data.get(j));
+//                }
+//            }
+//        }
+//        return hssfWorkbook;
+//    }
+//
+//    public static HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, String[][] values, HSSFWorkbook wb) {
+//        // 第一步,创建一个webbook,对应一个Excel文件
+//        if (wb == null) {
+//            wb = new HSSFWorkbook();
+//        }
+//        // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
+//        HSSFSheet sheet = wb.createSheet(sheetName);
+//        // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
+//        HSSFRow row = sheet.createRow(0);
+//        // 第四步,创建单元格,并设置值表头 设置表头居中
+//        HSSFCellStyle style = wb.createCellStyle();
+//        style.setLocked(true);
+//        style.setAlignment(HorizontalAlignment.CENTER); // 创建一个居中格式
+//
+//        HSSFCell cell = null;
+//        // 创建标题
+//        for (int i = 0; i < title.length; i++) {
+//            cell = row.createCell(i);
+//            cell.setCellValue(title[i]);
+//            cell.setCellStyle(style);
+//        }
+//        // 创建内容
+//        for (int i = 0; i < values.length; i++) {
+//            row = sheet.createRow(i + 1);
+//            for (int j = 0; j < values[i].length; j++) {
+//                cell = row.createCell(j);
+//                cell.setCellValue(values[i][j]);
+//                cell.setCellStyle(style);
+//            }
+//        }
+//
+//        return wb;
+//    }
+//
+//}
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalOrderCar/tAbnormalOrder.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalOrderCar/tAbnormalOrder.html
new file mode 100644
index 0000000..c0d35ad
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalOrderCar/tAbnormalOrder.html
@@ -0,0 +1,90 @@
+@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="abnormalStatus" name="处理状态" >
+                                    <option value="">全部</option>
+                                    <option value="1">待处理</option>
+                                    <option value="2">已处理</option>
+                                </#SelectCon>
+                            </div>
+                            <div class="col-sm-3">
+                                    <#SelectCon id="type" name="订单类型" >
+                                    <option value="1" selected>快车</option>
+                                    <option value="2">跨城</option>
+                                    <option value="3">出租车</option>
+                                </#SelectCon>
+                            </div>
+
+                                    <div class="col-sm-3">
+                                <#button name="搜索" icon="fa-search" clickFun="TAbnormalOrder.search()"/>
+                                <#button name="重置" icon="fa-trash" clickFun="TAbnormalOrder.resetSearch()" space="true"/>
+                            </div>
+                        </div>
+                        <div class="hidden-xs" id="TOrderPrivateCarTableToolbar" role="group">
+                            <#button name="处理详情" icon="fa-search" clickFun="TAbnormalOrder.orderDetail()"/>
+                            <#button name="处理异常订单" icon="fa-edit" clickFun="TAbnormalOrder.cancelOrder()" space="true"/>
+                            <#button name="导出Excel" icon="" clickFun="TAbnormalOrder.exportExcel()" space="true"/>
+                        </div>
+                        <#table id="TOrderPrivateCarTable"/>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tAbnormalOrderCar/tAbnormalOrder.js"></script>
+<script>
+    laydate.render({
+        elem: '#insertTime'
+        ,range: true
+    });
+</script>
+@}
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalOrderCar/tAbnormalOrder_orderDetail.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalOrderCar/tAbnormalOrder_orderDetail.html
new file mode 100644
index 0000000..2b0fc21
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalOrderCar/tAbnormalOrder_orderDetail.html
@@ -0,0 +1,421 @@
+@layout("/common/_container.html"){
+<!DOCTYPE html>
+
+<html lang="zh-CN">
+
+<head>
+    <meta charset="UTF-8">
+    <title>处理异常订单</title>
+    <style>
+        body {
+            background: #888;
+            margin: 0;
+            padding: 0;
+        }
+
+        .container {
+            background: #fff;
+            margin: 20px auto;
+            padding: 20px 30px;
+            border-radius: 10px;
+            max-width: 98vw;
+            min-width: 1200px;
+        }
+
+        .title {
+            font-size: 20px;
+            font-weight: bold;
+            margin-bottom: 20px;
+        }
+
+        .order-table {
+            width: 100%;
+            border-collapse: collapse;
+            margin-bottom: 30px;
+        }
+
+        .order-table th,
+        .order-table td {
+            border: 1px solid #e0e0e0;
+            padding: 8px 6px;
+            text-align: center;
+            font-size: 13px;
+        }
+
+        .order-table th {
+            background: #f8f8f8;
+            font-weight: 600;
+        }
+
+        .section-title {
+            font-size: 16px;
+            font-weight: bold;
+            margin: 30px 0 10px 0;
+        }
+
+        .desc-row {
+            margin-bottom: 10px;
+        }
+
+        .desc-label {
+            font-weight: bold;
+            margin-right: 10px;
+        }
+
+        .img-list {
+            display: flex;
+            gap: 20px;
+            margin: 10px 0 20px 0;
+        }
+
+        .img-list img {
+            width: 120px;
+            height: 80px;
+            object-fit: cover;
+            border-radius: 6px;
+            border: 1px solid #ccc;
+        }
+
+        .order-link {
+            color: #1976d2;
+            text-decoration: underline;
+            cursor: pointer;
+        }
+
+        input[type="radio"] {
+    accent-color: #1976d2;
+    width: 18px;
+    height: 18px;
+    vertical-align: middle;
+    margin-right: 4px;
+}
+
+.radio-group label {
+    margin-right: 18px;
+    font-size: 15px;
+    cursor: pointer;
+}
+#duty-selector {
+    display: flex;
+    margin-bottom: 18px;
+    border: 1px solid #ccc;
+    border-radius: 4px;
+    overflow: hidden;
+    width: fit-content;
+}
+
+
+
+.duty-btn {
+    flex: 1 1 0;
+    padding: 12px 32px;
+    border: none;
+    background: #fff;
+    color: #222;
+    font-size: 16px;
+    cursor: pointer;
+    outline: none;
+    border-right: 1px solid #ccc;
+    transition: background 0.2s, color 0.2s;
+    height: 62px;
+    line-height: 24px;
+}
+
+.duty-btn:last-child {
+    border-right: none;
+}
+
+.duty-btn.active {
+    background: #1976d2;
+    color: #fff;
+    font-weight: bold;
+}
+    .action-btn {
+        min-width: 140px;
+        height: 48px;
+        background: #1976d2;
+        color: #fff;
+        border: none;
+        border-radius: 5px;
+        font-size: 16px;
+        font-weight: bold;
+        margin-right: 18px;
+        cursor: pointer;
+        transition: background 0.2s, box-shadow 0.2s;
+        box-shadow: 0 2px 6px rgba(25, 118, 210, 0.08);
+    }
+    .action-btn:last-child {
+        margin-right: 0;
+    }
+    .action-btn:hover {
+        background: #1565c0;
+    }
+    #action-btns {
+        margin-top: 32px;
+        display: flex;
+        align-items: center;
+    }
+    </style>
+</head>
+
+<body>
+     <input type="hidden" id="orderNum"  name ="orderNum" value="${item.orderNum}"/>
+     <input type="hidden" id="type" name ="type" value="${type}"/>
+     <div class="ibox float-e-margins">
+        <div class="title">处理异常订单</div>
+        <div class="section-title">订单信息</div>
+        <table class="order-table">
+            <thead>
+                <tr>
+                    <th>下单时间</th>
+                    <th>订单编号</th>
+                    <th>订单来源</th>
+                    <th>乘车时间</th>
+                    <th>下单用户昵称</th>
+                    <th>下单用户手机</th>
+                    <th>乘车用户姓名</th>
+                    <th>乘车用户手机</th>
+                    <th>起点</th>
+                    <th>终点</th>
+                    <th>选择车型</th>
+                    <th>接单司机</th>
+                    <th>接单车辆</th>
+                    <th>订单金额</th>
+                    <th>状态</th>
+                    <th>操作</th>
+                </tr>
+            </thead>
+            <tbody>
+                <tr>
+                    <td>${item.insertTimeStr}</td>
+                    <td>${item.orderNum}</td>
+                    <td>${item.orderSource}</td>
+                    <td>${item.travelTimeStr}</td>
+                    <td>${item.userName}</td>
+                    <td>${item.userPhone}</td>
+                    <td>${item.passengers}</td>
+                    <td>${item.passengersPhone}</td>
+                    <td>${item.boardingAddress}</td>
+                    <td>${item.getoffAddress}</td>
+                    <td>${item.serverCarModel}</td>
+                    <td>${item.driver}</td>
+                    <td>${item.car}</td>
+                    <td>${item.orderMoney}</td>
+                    <!--            1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付-->
+                    <td>
+                        @if(item.state==1) {
+                        待接单
+                        @}else if(item.state==2){
+                        待出发
+                        @}else if(item.state==3){
+                        待到达预约地点
+                        @}else if(item.state==4){
+                        待乘客上车
+                        @}else if(item.state==5){
+                        服务中
+                        @}else if(item.state==6){
+                        完成服务
+                        @}else if(item.state==7){
+                        待支付
+                        @}else if(item.state==8){
+                        待评价
+                        @}else if(item.state==9){
+                        已完成
+                        @}else if(item.state==10){
+                        已取消
+                        @}else if(item.state==11){
+                        改派中
+                        @}else if(item.state==12){
+                        取消待支付
+                        @}else{
+                        未知
+                        @}
+                    </td>
+                    <td><a class="order-link" href="#">查看订单详情</a></td>
+                </tr>
+            </tbody>
+        </table>
+
+        <div class="section-title">乘客反馈情况</div>
+        <div class="desc-row">
+            <span class="desc-label"> ${item.abnormalIntro}</span>
+
+        </div>
+        <div class="img-list">
+            <!--       逗号拼接的图片 -->
+            @for(item in abnormalImg) {
+            <img src="${item}" alt="图片" />
+            @}
+        </div>
+        <!-- 你可以根据实际图片地址替换上面src -->
+
+        <!-- 其他内容可根据实际需求继续补充 -->
+        <div class="section-title">选择责任方</div>
+        <div id="duty-selector">
+            <button type="button" class="duty-btn active" data-type="platformAll">平台全责</button>
+            <button type="button" class="duty-btn" data-type="driverAll">司机全责</button>
+            <button type="button" class="duty-btn" data-type="passengerAll">乘客全责</button>
+            <button type="button" class="duty-btn" data-type="platformPart">平台部分责任</button>
+            <button type="button" class="duty-btn" data-type="driverPart">司机部分责任</button>
+        </div>
+
+        <div id="duty-content" style="margin-top:20px;">
+            <!-- 内容区域,JS填充 -->
+        </div>
+
+        <!-- 处理备注区域 -->
+        <div class="section-title" style="margin-top:32px;">处理备注</div>
+        <textarea name="handleRemark" rows="4" style="width:90%;max-width:900px;min-width:300px;padding:10px;font-size:15px;border:1px solid #ccc;border-radius:4px;resize:vertical;"></textarea>
+
+        <div id="action-btns">
+            <button id="saveBtn" class="action-btn" onclick="save()" style="display:none;">确认处理</button>
+            <button id="closeBtn" class="action-btn" style="display:none;">关闭</button>
+          </div>
+    </div>
+</body>
+
+
+<script>
+    const dutyContent = document.getElementById('duty-content');
+    const btns = document.querySelectorAll('.duty-btn');
+    const responsibilityType = '${item.responsibilityType}';
+    const orderNum = '${item.orderNum}';
+    const isReadonly = responsibilityType && responsibilityType !== 'null' && responsibilityType !== '';
+    const typeMap = {1:'platformAll',2:'driverAll',3:'passengerAll',4:'platformPart',5:'driverPart'};
+    const reverseTypeMap = {'platformAll':1,'driverAll':2,'passengerAll':3,'platformPart':4,'driverPart':5};
+
+    function renderContent(type, readonly) {
+        let html = '';
+        if (type === 'platformAll') {
+            html = `
+                <div>
+                    <div class="radio-group">超时是否启用备用金支付:
+                        <label><input type="radio" name="ybj" checked disabled>是</label>
+                        <label><input type="radio" name="ybj" disabled>否</label>
+                    </div>
+                    <div class="radio-group">超时是否生成追偿支付单:
+                          <label><input type="radio" name="zcpay" checked disabled>是</label>
+                         <label><input type="radio" name="zcpay" disabled>否</label>
+                        </div>
+                </div>
+            `;
+        } else if (type === 'driverAll') {
+            html = `
+                <div style="margin-top:10px;">修改订单金额为: 0</div>
+            `;
+        } else if (type === 'passengerAll') {
+            html = `
+                <div>超时是否启用备用金支付:
+                    <label><input type="radio" name="ybj" checked disabled>是</label>
+                    <label><input type="radio" name="ybj" disabled>否</label>
+                </div>
+                <div>超时是否生成追偿支付单:
+                    <label><input type="radio" name="zcpay" checked disabled>是</label>
+                    <label><input type="radio" name="zcpay" disabled>否</label>
+                </div>
+            `;
+        } else if (type === 'platformPart' || type === 'driverPart') {
+            html = `
+                <div>超时是否启用备用金支付:
+                    <label><input type="radio" name="ybj" checked disabled>是</label>
+                    <label><input type="radio" name="ybj" disabled>否</label>
+                </div>
+                <div>超时是否生成追偿支付单:
+                    <label><input type="radio" name="zcpay" checked disabled>是</label>
+                    <label><input type="radio" name="zcpay" disabled>否</label>
+                </div>
+                <div style="margin-top:10px;">
+                    新增修改订单金额为:<input type="number" id="money" name="money" style="width:100px;"  value="${money}"> 元
+                </div>
+            `;
+        }
+        dutyContent.innerHTML = html;
+    }
+
+    function setReadonlyMode() {
+      btns.forEach(btn => {
+        btn.classList.remove('active');
+        btn.disabled = true;
+        if (btn.dataset.type === typeMap[responsibilityType]) {
+          btn.classList.add('active');
+        }
+      });
+      renderContent(typeMap[responsibilityType], true);
+      document.querySelector('textarea[name=handleRemark]').disabled = true;
+      document.getElementById('saveBtn').style.display = 'none';
+      document.getElementById('closeBtn').style.display = '';
+    }
+
+    function setEditMode() {
+      btns.forEach(btn => btn.disabled = false);
+      btns.forEach(btn => btn.classList.remove('active'));
+      btns[0].classList.add('active');
+      renderContent('platformAll', false);
+      document.querySelector('textarea[name=handleRemark]').disabled = false;
+      document.getElementById('saveBtn').style.display = '';
+      document.getElementById('closeBtn').style.display = 'none';
+    }
+
+    window.onload = function() {
+      if (isReadonly) {
+        setReadonlyMode();
+      } else {
+        setEditMode();
+      }
+    };
+
+    btns.forEach(btn => {
+      btn.onclick = function () {
+        if (isReadonly) return;
+        btns.forEach(b => b.classList.remove('active'));
+        btn.classList.add('active');
+        renderContent(btn.dataset.type, false);
+      }
+    });
+
+     function save() {
+
+        let selectedBtn = document.querySelector('.duty-btn.active');
+         let responsibilityTypeVal = reverseTypeMap[selectedBtn.dataset.type];
+         let remark = document.querySelector('textarea[name=handleRemark]').value;
+        // 取money
+         let money = $("#money").val();
+         let type = document.querySelector('input[name=type]').value;
+         let orderNum = document.querySelector('input[name=orderNum]').value;
+
+        console.log(type,orderNum)
+
+        //提交信息
+        var ajax = new $ax(Feng.ctxPath + "/abnormal/save", function(data){
+            Feng.success("操作成功!");
+        },function(data){
+            Feng.error("操作失败!");
+        });
+        ajax.set("responsibilityTypeVal",responsibilityTypeVal);
+        ajax.set("remark",remark);
+        ajax.set("money",money);
+        ajax.set("type",type);
+        ajax.set("orderNum",orderNum);
+        ajax.start();
+
+    };
+
+    document.getElementById('closeBtn').onclick = function() {
+      // 尝试关闭当前窗口或弹窗
+      if(window.parent && window.parent !== window && window.parent.layer) {
+        // layer弹窗
+        var index = window.parent.layer.getFrameIndex(window.name);
+        window.parent.layer.close(index);
+      } else if(window.opener) {
+        window.close();
+      } else if(window.top && window.top.closeDialog) {
+        window.top.closeDialog();
+      } else {
+        window.close();
+      }
+    };
+</script>
+
+</html>
+
+@}
\ No newline at end of file
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalOrderCar/tOrderPrivateCar_add.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalOrderCar/tOrderPrivateCar_add.html
new file mode 100644
index 0000000..e4d7b56
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalOrderCar/tOrderPrivateCar_add.html
@@ -0,0 +1,487 @@
+@layout("/common/_container.html"){
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal">
+            <input type="hidden" id="html" value="2">
+            <input type="hidden" id="type" value="2">
+
+            <div class="row">
+                <div class="form-group">
+                    <label class="control-label col-sm-2">起点:</label>
+                    <div class="col-sm-3">
+                        <input class="form-control" id="startAddress" autocomplete="off" onclick="TOrderPrivateCarInfoDlg.startAddress()">
+                        <input type="hidden" id="startLon">
+                        <input type="hidden" id="startLat">
+                    </div>
+                </div>
+                <div class="form-group" id="startAddressModel" hidden>
+                    <label class="control-label col-sm-2"></label>
+                    <div class="col-sm-6" style="margin-left: 15px;height: 500px" id="startAddressBody">
+
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="control-label col-sm-2">终点:</label>
+                    <div class="col-sm-3">
+                        <input class="form-control" id="endAddress" autocomplete="off" onclick="TOrderPrivateCarInfoDlg.endAddress()">
+                        <input type="hidden" id="endLon">
+                        <input type="hidden" id="endLat">
+                    </div>
+                </div>
+                <div class="form-group" id="endAddressModel" hidden>
+                    <label class="control-label col-sm-2"></label>
+                    <div class="col-sm-6" style="margin-left: 15px;height: 500px" id="endAddressBody">
+
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="control-label col-sm-2">用车时间:</label>
+                    <div class="col-sm-3">
+                        <input class="form-control"  autocomplete="off" id="travelTime">
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="control-label col-sm-2">乘车人姓名:</label>
+                    <div class="col-sm-3">
+                        <input class="form-control" id="passengers">
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="control-label col-sm-2">乘车人手机号:</label>
+                    <div class="col-sm-3">
+                        <input class="form-control" id="passengersPhone">
+                    </div>
+                </div>
+
+
+                <div class="form-group">
+                    <label class="control-label col-sm-2">车型:</label>
+                    <div class="col-sm-3">
+                        <select class="form-control " id="serverCarModelId">
+                            @for(carModel in carModelList){
+                            <option value="${carModel.id}">${carModel.name}</option>
+                            @}
+                        </select>
+                    </div>
+                </div>
+            </div>
+
+            <div class="row btn-group-m-t">
+                <div class="col-sm-10">
+                    <#button btnCss="info" name="保存" id="ensure" icon="fa-check"
+                    clickFun="TOrderPrivateCarInfoDlg.addSubmit()"/>
+                </div>
+            </div>
+        </div>
+
+    </div>
+</div>
+
+<script src="${ctxPath}/static/modular/system/tOrderPrivateCar/tOrderPrivateCar_info.js"></script>
+<script type="text/javascript">
+	window._AMapSecurityConfig = {
+		securityJsCode: '44c5ee9ad584605d91ca69bfac32c761',
+	}
+</script>
+<script type="text/javascript"
+        src="https://webapi.amap.com/maps?v=1.4.10&key=d3bde6afb050067e1a765a8d1d1f4c54&plugin=AMap.Autocomplete,AMap.PlaceSearch"></script>
+<script type="text/javascript" src="https://cache.amap.com/lbs/static/addToolbar.js"></script>
+
+<script>
+    laydate.render({
+        elem: '#travelTime'
+        , type: 'datetime'
+        ,trigger: 'click' //采用click弹出
+        , min:  new Date().toString()
+    });
+</script>
+
+<script type="text/javascript">
+    //起点地图加载
+    var marker, map = new AMap.Map("startAddressBody", {
+        resizeEnable: true,
+        zoom: 15,
+        zooms: [3, 20]
+    }); //定位标注当前位置
+    map.plugin('AMap.Geolocation', function () {
+        geolocation = new AMap.Geolocation({
+            enableHighAccuracy: true, //是否使用高精度定位,默认:true
+            timeout: 10000, //超过10秒后停止定位,默认:无穷大
+            maximumAge: 0, //定位结果缓存0毫秒,默认:0
+            convert: true, //自动偏移坐标,偏移后的坐标为高德坐标,默认:true
+            showButton: true, //显示定位按钮,默认:true
+            showMarker: true, //定位成功后在定位到的位置显示点标记,默认:true
+            showCircle: true, //定位成功后用圆圈表示定位精度范围,默认:true
+            panToLocation: true, //定位成功后将定位到的位置作为地图中心点,默认:true
+            buttonPosition: 'LB', //定位按钮的停靠位置  LB左下角、  RB右下角
+            buttonOffset: new AMap.Pixel(10, 20), //定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
+            zoomToAccuracy: true, //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
+        });
+        map.addControl(geolocation);
+        geolocation.getCurrentPosition();
+        AMap.event.addListener(geolocation, 'complete', onComplete);
+        //返回定位信息
+        AMap.event.addListener(geolocation, 'error', onError);
+        //返回定位出错信息
+    }); //解析定位结果
+    var city;
+
+
+    map.on('click', function (e) {
+        if (marker != null) {
+            marker.setMap(null);
+        }
+        //添加标记点
+        $("#startLon").val(e.lnglat.getLng());
+        $("#startLat").val(e.lnglat.getLat());
+         marker = new AMap.Marker({
+            map: map,
+            position: new AMap.LngLat(e.lnglat.getLng(), e.lnglat.getLat()),   // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
+        });
+        regeoCode(e.lnglat.getLng(),e.lnglat.getLat());
+    });
+
+
+    var infoWindow = new AMap.InfoWindow({
+        autoMove: true,
+        offset: {
+            x: 0,
+            y: -30
+        }
+    }); //回调函数
+
+
+    //根据经纬度获取详细地址
+    function regeoCode(lon,lat) {
+
+        var lnglat = [];
+        lnglat.push(lon);
+        lnglat.push(lat);
+        map.add(marker);
+        marker.setPosition(lnglat);
+
+        AMap.service('AMap.Geocoder', function() {
+            geocoder = new AMap.Geocoder({});
+            geocoder.getAddress(lnglat, function (status, result) {
+                if (status === 'complete' && result.regeocode) {
+                    var address = result.regeocode.formattedAddress;
+                    $("#startAddress").val(address);
+                } else {
+                    Feng.error('根据经纬度查询地址失败【' + result + '】')
+                    return
+                }
+                var data={
+                    "name":result.regeocode.addressComponent.neighborhood,
+                    "location":{
+                        "lat":lat,
+                        "lng":lon
+                    },
+                    "address":address,
+                    "tel":"",
+                    "type":result.regeocode.addressComponent.neighborhoodType
+                };
+                infoWindow.setContent(createContent(data));
+                infoWindow.open(map, marker.getPosition());
+            });
+        })
+    }
+
+
+
+    function onComplete(data) {
+        var str = [];
+        city = data.addressComponent.citycode;
+        str.push('定位结果:' + data.position);
+        str.push('定位类别:' + data.location_type);
+        if (data.accuracy) {
+            str.push('精度:' + data.accuracy + ' 米');
+        }
+        //如为IP精确定位结果则没有精度信息
+        str.push('是否经过偏移:' + (data.isConverted ? '是' : '否'));
+        var lnglatXY = [data.position.getLng(), data.position.getLat()];
+        //地图上所标点的坐标
+        AMap.service('AMap.Geocoder', function () {
+            //回调函数
+            geocoder = new AMap.Geocoder({});
+            geocoder.getAddress(lnglatXY, function (status, result) {
+                if (status === 'complete' && result.info === 'OK') {
+                    //获得了有效的地址信息:                    //即,result.regeocode.formattedAddress
+//                     console.log(result.regeocode.formattedAddress);
+                    var address = result.regeocode.formattedAddress;
+                    str.push('详细地址:' + address);
+                    // todo 不弹出信息框
+                    // alert(str.join(' | '));
+                } else {
+                    // alert(str.join(' | ')); //获取地址失败
+                }
+            });
+        })
+    } //解析定位错误信息
+    function onError(data) {
+        alert('定位失败,原因:' + data.message);
+    }
+
+    //输入搜索点信息
+    var autoOptions = {
+        city: city, //在规定城市搜索、默认全国
+        input: "startAddress"
+    };
+
+    var auto = new AMap.Autocomplete(autoOptions);
+    var placeSearch = new AMap.PlaceSearch({
+        pageSize: 5, // 单页显示结果条数
+        pageIndex: 1, // 页码
+        children: 0, //不展示子节点数据
+        city: city, // 兴趣点城市
+        citylimit: true, //是否强制限制在设置的城市内搜索
+        panel: "panel", // 结果列表将在此容器中进行展示。
+        autoFitView: true, // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围
+        extensions: 'base', //返回基本地址信息  */
+        map: map // 展现结果的地图实例
+    }); //构造地点查询类
+
+    AMap.event.addListener(auto, "select", select); //注册监听,当选中某条记录时会触发
+    function select(e) {
+        placeSearch.setCity(e.poi.adcode);
+        placeSearch.search(e.poi.name); //关键字查询查询        //设置搜索位置定点标注
+        if (e.poi && e.poi.location) {
+            map.setZoom(15);
+            map.setCenter(e.poi.location);
+            var id = e.poi.id; //详情查询
+            placeSearch.getDetails(id, function (status, result) {
+                if (status === 'complete' && result.info === 'OK') {
+                    placeSearch_CallBack(result);
+                }
+            });
+        }
+    }
+
+    function placeSearch_CallBack(data) {
+        if (marker != null) {
+            marker.setMap(null);
+        }
+        var poiArr = data.poiList.pois; //添加marker
+          marker = new AMap.Marker({
+            map: map,
+            position: poiArr[0].location
+        });
+
+        map.add(marker);
+        marker.setPosition(marker.getPosition());
+
+        infoWindow.setContent(createContent(poiArr[0]));
+        infoWindow.open(map, marker.getPosition());
+    }
+
+    function createContent(poi) {
+        console.log(poi);
+        //信息窗体内容
+        $("#startAddress").val(poi.address);
+        $("#startLon").val(poi.location.lng);
+        $("#startLat").val(poi.location.lat);
+        $("#areaCode").val(poi.adcode);
+
+        var s = [];
+        s.push("<b>名称:" + poi.name + "</b>");
+        s.push("地址:" + poi.address);
+        s.push("电话:" + poi.tel);
+        s.push("类型:" + poi.type);
+        return s.join("<br>");
+    }
+</script>
+
+<script>
+    //终点地图加载
+    var marker1, mapp = new AMap.Map("endAddressBody", {
+        resizeEnable: true,
+        zoom: 15,
+        zooms: [3, 20]
+    }); //定位标注当前位置
+    mapp.plugin('AMap.Geolocation', function () {
+        geolocation = new AMap.Geolocation({
+            enableHighAccuracy: true, //是否使用高精度定位,默认:true
+            timeout: 10000, //超过10秒后停止定位,默认:无穷大
+            maximumAge: 0, //定位结果缓存0毫秒,默认:0
+            convert: true, //自动偏移坐标,偏移后的坐标为高德坐标,默认:true
+            showButton: true, //显示定位按钮,默认:true
+            showMarker: true, //定位成功后在定位到的位置显示点标记,默认:true
+            showCircle: true, //定位成功后用圆圈表示定位精度范围,默认:true
+            panToLocation: true, //定位成功后将定位到的位置作为地图中心点,默认:true
+            buttonPosition: 'LB', //定位按钮的停靠位置  LB左下角、  RB右下角
+            buttonOffset: new AMap.Pixel(10, 20), //定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
+            zoomToAccuracy: true, //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
+        });
+        mapp.addControl(geolocation);
+        geolocation.getCurrentPosition();
+        AMap.event.addListener(geolocation, 'complete', onComplete);
+        //返回定位信息
+        AMap.event.addListener(geolocation, 'error', onError);
+        //返回定位出错信息
+    }); //解析定位结果
+    var cityy;
+
+    mapp.on('click', function (e) {
+        if (marker1 != null) {
+            marker1.setMap(null);
+        }
+        //添加标记点
+        $("#startLon").val(e.lnglat.getLng());
+        $("#startLat").val(e.lnglat.getLat());
+        marker1 = new AMap.Marker({
+            map: mapp,
+            position: new AMap.LngLat(e.lnglat.getLng(), e.lnglat.getLat()),   // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
+        });
+        regeoCode1(e.lnglat.getLng(),e.lnglat.getLat());
+    });
+
+
+    var infoWindow = new AMap.InfoWindow({
+        autoMove: true,
+        offset: {
+            x: 0,
+            y: -30
+        }
+    }); //回调函数
+
+
+    //根据经纬度获取详细地址
+    function regeoCode1(lon,lat) {
+
+        var lnglat = [];
+        lnglat.push(lon);
+        lnglat.push(lat);
+        mapp.add(marker1);
+        marker1.setPosition(lnglat);
+
+        AMap.service('AMap.Geocoder', function() {
+            geocoder = new AMap.Geocoder({});
+            geocoder.getAddress(lnglat, function (status, result) {
+                if (status === 'complete' && result.regeocode) {
+                    var address = result.regeocode.formattedAddress;
+                    $("#endAddress").val(address);
+                } else {
+                    Feng.error('根据经纬度查询地址失败【' + result + '】')
+                    return
+                }
+                var data={
+                    "name":result.regeocode.addressComponent.neighborhood,
+                    "location":{
+                        "lat":lat,
+                        "lng":lon
+                    },
+                    "address":address,
+                    "tel":"",
+                    "type":result.regeocode.addressComponent.neighborhoodType
+                };
+
+                infoWindow.setContent(createContentt(data));
+                infoWindow.open(mapp, marker1.getPosition());
+            });
+        })
+    }
+
+
+
+
+
+    function onComplete(data) {
+        var str = [];
+        cityy = data.addressComponent.citycode;
+        str.push('定位结果:' + data.position);
+        str.push('定位类别:' + data.location_type);
+        if (data.accuracy) {
+            str.push('精度:' + data.accuracy + ' 米');
+        }
+        //如为IP精确定位结果则没有精度信息
+        str.push('是否经过偏移:' + (data.isConverted ? '是' : '否'));
+        var lnglatXY = [data.position.getLng(), data.position.getLat()];
+        //地图上所标点的坐标
+        AMap.service('AMap.Geocoder', function () {
+            //回调函数
+            geocoder = new AMap.Geocoder({});
+            geocoder.getAddress(lnglatXY, function (status, result) {
+                if (status === 'complete' && result.info === 'OK') {
+                    //获得了有效的地址信息:                    //即,result.regeocode.formattedAddress
+                    //                     console.log(result.regeocode.formattedAddress);
+                    var address = result.regeocode.formattedAddress;
+                    str.push('详细地址:' + address);
+// todo 不弹出信息框
+// alert(str.join(' | '));
+                } else {
+// alert(str.join(' | ')); //获取地址失败
+                }
+            });
+        })
+    } //解析定位错误信息
+    function onError(data) {
+        alert('定位失败,原因:' + data.message);
+    }
+
+    //输入搜索点信息
+    var autoOptionss = {
+        city: cityy, //在规定城市搜索、默认全国
+        input: "endAddress"
+    };
+    var autoo = new AMap.Autocomplete(autoOptionss);
+    var placeSearchh = new AMap.PlaceSearch({
+        pageSize: 5, // 单页显示结果条数
+        pageIndex: 1, // 页码
+        children: 0, //不展示子节点数据
+        city: city, // 兴趣点城市
+        citylimit: true, //是否强制限制在设置的城市内搜索
+        panel: "panel", // 结果列表将在此容器中进行展示。
+        autoFitView: true, // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围
+        extensions: 'base', //返回基本地址信息  */
+        map: mapp // 展现结果的地图实例
+    }); //构造地点查询类
+    AMap.event.addListener(autoo, "select", selectt); //注册监听,当选中某条记录时会触发
+
+    function selectt(e) {
+        placeSearchh.setCity(e.poi.adcode);
+        placeSearchh.search(e.poi.name); //关键字查询查询        //设置搜索位置定点标注
+        if (e.poi && e.poi.location) {
+            mapp.setZoom(15);
+            mapp.setCenter(e.poi.location);
+            var id = e.poi.id; //详情查询
+            placeSearchh.getDetails(id, function (status, result) {
+                if (status === 'complete' && result.info === 'OK') {
+                    placeSearch_CallBackk(result);
+                }
+            });
+        }
+    }
+
+    function placeSearch_CallBackk(data) {
+        if (marker1 != null) {
+            marker1.setMap(null);
+        }
+        var poiArr = data.poiList.pois; //添加marker
+        marker1 = new AMap.Marker({
+            map: mapp,
+            position: poiArr[0].location
+        });
+
+        mapp.add(marker1);
+        marker1.setPosition(marker1.getPosition());
+
+        infoWindow.setContent(createContentt(poiArr[0]));
+        infoWindow.open(mapp, marker1.getPosition());
+    }
+
+    function createContentt(poi) {
+        console.log(poi);
+        //信息窗体内容
+        $("#endAddress").val(poi.address);
+        $("#endLon").val(poi.location.lng);
+        $("#endLat").val(poi.location.lat);
+        $("#areaCode").val(poi.adcode);
+
+        var ss = [];
+        ss.push("<b>名称:" + poi.name + "</b>");
+        ss.push("地址:" + poi.address);
+        ss.push("电话:" + poi.tel);
+        ss.push("类型:" + poi.type);
+        return ss.join("<br>");
+    }
+</script>
+@}
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalOrderCar/tOrderPrivateCar_trajectory.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalOrderCar/tOrderPrivateCar_trajectory.html
new file mode 100644
index 0000000..a2465eb
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalOrderCar/tOrderPrivateCar_trajectory.html
@@ -0,0 +1,57 @@
+@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="${tOrderPrivateCarId}">
+            <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 type="text/javascript">
+	window._AMapSecurityConfig = {
+		securityJsCode: '44c5ee9ad584605d91ca69bfac32c761',
+	}
+</script>
+<script src="https://webapi.amap.com/maps?v=1.4.8&key=d3bde6afb050067e1a765a8d1d1f4c54"></script>
+<script src="https://cache.amap.com/lbs/static/addToolbar.js"></script>
+<script src="${ctxPath}/static/modular/system/tOrderPrivateCar/tOrderPrivateCar_info.js"></script>
+@}
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalPayOrderCar/tAbnormalOrder.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalPayOrderCar/tAbnormalOrder.html
new file mode 100644
index 0000000..31961ef
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalPayOrderCar/tAbnormalOrder.html
@@ -0,0 +1,60 @@
+@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">
+                                <#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="abnormalStatus" name="状态" >
+                                    <option value="" selected>全部</option>
+                                    <option value="1">未支付</option>
+                                    <option value="2">已支付</option>
+                                </#SelectCon>
+                            </div>
+
+                                    <div class="col-sm-3">
+                                <#button name="搜索" icon="fa-search" clickFun="TAbnormalOrder.search()"/>
+                                <#button name="重置" icon="fa-trash" clickFun="TAbnormalOrder.resetSearch()" space="true"/>
+                            </div>
+                        </div>
+                        <div class="hidden-xs" id="TOrderPrivateCarTableToolbar" role="group">
+                            <#button name="导出Excel" icon="" clickFun="TAbnormalOrder.excelExport()"/>
+                        </div>
+                        <#table id="TOrderPrivateCarTable"/>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tAbnormalPayOrderCar/tAbnormalOrder.js"></script>
+<script>
+    laydate.render({
+        elem: '#insertTime'
+        ,range: true
+    });
+</script>
+@}
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalPayOrderCar/tAbnormalOrder_orderDetail.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalPayOrderCar/tAbnormalOrder_orderDetail.html
new file mode 100644
index 0000000..601a472
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalPayOrderCar/tAbnormalOrder_orderDetail.html
@@ -0,0 +1,271 @@
+@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">
+                    <#label id="insertTimeStr" name="下单时间" value="${item.insertTimeStr}"/>
+                    <#label id="orderSourceStr" name="订单来源" value="${item.orderSourceStr}"/>
+                </div>
+
+                <div class="col-sm-6">
+                    <#label id="orderNum" name="订单编号" value="${item.orderNum}"/>
+                    <#label id="travelTimeStr" name="乘车时间" value="${item.travelTimeStr}"/>
+                </div>
+            </div>
+            @for(m in maps){
+            <div class="childOrders" style="border: 1px solid;">
+                <div class="row">
+                    <div class="col-sm-6">
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label">尾号${m.userPhone1}:</label>
+                            <div class="col-sm-9">
+                                <label class="control-label">上车地点:${m.boardingAddress}</label>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label"></label>
+                            <div class="col-sm-9">
+                                <label class="control-label">下车地点:${m.getoffAddress}</label>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label">下单用户昵称:</label>
+                            <div class="col-sm-9">
+                                <label class="control-label">${m.userName}</label>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label">乘车用户昵称:</label>
+                            <div class="col-sm-9">
+                                <label class="control-label">${m.passengers}</label>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="col-sm-6">
+                        <div class="col-sm-6">
+                            <div class="form-group">
+                                <label class="col-sm-5 control-label">${m.peopleNum}人</label>
+                                <div class="col-sm-7">
+                                    <label class="control-label"></label>
+                                </div>
+                            </div>
+                            <div class="form-group">
+                                <label class="col-sm-5 control-label"></label>
+                                <div class="col-sm-7">
+                                    <label class="control-label"></label>
+                                </div>
+                            </div>
+                            <div class="form-group">
+                                <label class="col-sm-5 control-label">下单用户手机号:</label>
+                                <div class="col-sm-7">
+                                    <label class="control-label">${m.userPhone}</label>
+                                </div>
+                            </div>
+                            <div class="form-group">
+                                <label class="col-sm-5 control-label">乘车用户手机号:</label>
+                                <div class="col-sm-7">
+                                    <label class="control-label">${m.passengersPhone}</label>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="col-sm-6">
+                            <div class="form-group">
+                                <label class="col-sm-5 control-label"></label>
+                                <div class="col-sm-7">
+                                    <label class="control-label"></label>
+                                </div>
+                            </div>
+                            <div class="form-group">
+                                <label class="col-sm-5 control-label"></label>
+                                <div class="col-sm-7">
+                                    <label class="control-label"></label>
+                                </div>
+                            </div>
+                            <div class="form-group">
+                                <label class="col-sm-5 control-label">上车时间:</label>
+                                <div class="col-sm-7">
+                                    <label class="control-label">${m.boardingTimeStr}</label>
+                                </div>
+                            </div>
+                            <div class="form-group">
+                                <label class="col-sm-5 control-label">下车时间:</label>
+                                <div class="col-sm-7">
+                                    <label class="control-label">${m.getoffTimeStr}</label>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            @}
+            <div class="row">
+                <div class="col-sm-6">
+                    <#label id="serverCarModel" name="选择车型" value="${item.serverCarModel}"/>
+                    <#label id="car" name="接单车辆" value="${item.car}"/>
+                </div>
+
+                <div class="col-sm-6">
+                    <#label id="driver" name="接单司机" value="${item.driver}"/>
+                    <#label id="companyName" name="车辆所属机构" value="${item.companyName}"/>
+                </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}元"/>
+                      @if(isNotEmpty(item.discountAmount)){
+                        <#label id="discountAmount" name="打车卡优惠金额" value="${item.discountAmount}元"/>
+                        @}
+                    </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-8">
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">行程录音:</label>
+                        <div class="col-sm-10">
+                            <audio src="${item.voice}" controls="controls">
+                                您的浏览器不支持 audio 标签。
+                            </audio>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <!--            是否异常订单-->
+            <div class="row" style="margin-top: 30px;">
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="font-weight: 700;">是否异常订单</h6>
+                </div>
+                <div class="col-sm-1">
+                    @if(item.abnormal == 2){
+                    <h6 class="h3Class" style="margin-left: 10%">是</h4>
+                        @}else{
+                        <h6 class="h3Class" style="margin-left: 10%">否</h4>
+                            @}
+                </div>
+
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="font-weight: 700;">处理结果</h6>
+                </div>
+                <div class="col-sm-1">
+                    @if(item.responsibilityType == 1){
+                    <h6 class="h3Class" style="margin-left: 10%">平台全责</h4>
+                        @}else if(item.responsibilityType == 2){
+                        <h6 class="h3Class" style="margin-left: 10%">司机全责</h4>
+                            @}else if(item.responsibilityType == 3){
+                            <h6 class="h3Class" style="margin-left: 10%">乘客全责</h4>
+                                @}else if( item.responsibilityType == 4){
+                                <h6 class="h3Class" style="margin-left: 10%">平台部分</h4>
+                                    @} else if( item.responsibilityType == 5){
+                                    <h6 class="h3Class" style="margin-left: 10%">司机部分</h4>
+                                        @}
+                </div>
+
+
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="font-weight: 700;">修改订单价格为:</h6>
+                </div>
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="margin-left: 10%">${item.responsibilityMoney}</h4>
+                </div>
+
+
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="font-weight: 700;">是否推广订单</h6>
+                </div>
+                <div class="col-sm-1">
+                    @if(item.promotion == 2){
+                    <h6 class="h3Class" style="margin-left: 10%">是</h4>
+                        @}else{
+                        <h6 class="h3Class" style="margin-left: 10%">否</h4>
+                            @}
+                </div>
+            </div>
+
+
+        </div>
+    </div>
+</div>
+<script src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script>
+<script type="text/javascript">
+	window._AMapSecurityConfig = {
+		securityJsCode: '44c5ee9ad584605d91ca69bfac32c761',
+	}
+</script>
+<script src="https://webapi.amap.com/maps?v=1.4.8&key=d3bde6afb050067e1a765a8d1d1f4c54"></script>
+<script src="https://cache.amap.com/lbs/static/addToolbar.js"></script>
+<script src="${ctxPath}/static/modular/system/tOrderPrivateCar/tOrderPrivateCar_info.js"></script>
+@}
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalPayOrderCar/tOrderPrivateCar_add.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalPayOrderCar/tOrderPrivateCar_add.html
new file mode 100644
index 0000000..e4d7b56
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalPayOrderCar/tOrderPrivateCar_add.html
@@ -0,0 +1,487 @@
+@layout("/common/_container.html"){
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal">
+            <input type="hidden" id="html" value="2">
+            <input type="hidden" id="type" value="2">
+
+            <div class="row">
+                <div class="form-group">
+                    <label class="control-label col-sm-2">起点:</label>
+                    <div class="col-sm-3">
+                        <input class="form-control" id="startAddress" autocomplete="off" onclick="TOrderPrivateCarInfoDlg.startAddress()">
+                        <input type="hidden" id="startLon">
+                        <input type="hidden" id="startLat">
+                    </div>
+                </div>
+                <div class="form-group" id="startAddressModel" hidden>
+                    <label class="control-label col-sm-2"></label>
+                    <div class="col-sm-6" style="margin-left: 15px;height: 500px" id="startAddressBody">
+
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="control-label col-sm-2">终点:</label>
+                    <div class="col-sm-3">
+                        <input class="form-control" id="endAddress" autocomplete="off" onclick="TOrderPrivateCarInfoDlg.endAddress()">
+                        <input type="hidden" id="endLon">
+                        <input type="hidden" id="endLat">
+                    </div>
+                </div>
+                <div class="form-group" id="endAddressModel" hidden>
+                    <label class="control-label col-sm-2"></label>
+                    <div class="col-sm-6" style="margin-left: 15px;height: 500px" id="endAddressBody">
+
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="control-label col-sm-2">用车时间:</label>
+                    <div class="col-sm-3">
+                        <input class="form-control"  autocomplete="off" id="travelTime">
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="control-label col-sm-2">乘车人姓名:</label>
+                    <div class="col-sm-3">
+                        <input class="form-control" id="passengers">
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="control-label col-sm-2">乘车人手机号:</label>
+                    <div class="col-sm-3">
+                        <input class="form-control" id="passengersPhone">
+                    </div>
+                </div>
+
+
+                <div class="form-group">
+                    <label class="control-label col-sm-2">车型:</label>
+                    <div class="col-sm-3">
+                        <select class="form-control " id="serverCarModelId">
+                            @for(carModel in carModelList){
+                            <option value="${carModel.id}">${carModel.name}</option>
+                            @}
+                        </select>
+                    </div>
+                </div>
+            </div>
+
+            <div class="row btn-group-m-t">
+                <div class="col-sm-10">
+                    <#button btnCss="info" name="保存" id="ensure" icon="fa-check"
+                    clickFun="TOrderPrivateCarInfoDlg.addSubmit()"/>
+                </div>
+            </div>
+        </div>
+
+    </div>
+</div>
+
+<script src="${ctxPath}/static/modular/system/tOrderPrivateCar/tOrderPrivateCar_info.js"></script>
+<script type="text/javascript">
+	window._AMapSecurityConfig = {
+		securityJsCode: '44c5ee9ad584605d91ca69bfac32c761',
+	}
+</script>
+<script type="text/javascript"
+        src="https://webapi.amap.com/maps?v=1.4.10&key=d3bde6afb050067e1a765a8d1d1f4c54&plugin=AMap.Autocomplete,AMap.PlaceSearch"></script>
+<script type="text/javascript" src="https://cache.amap.com/lbs/static/addToolbar.js"></script>
+
+<script>
+    laydate.render({
+        elem: '#travelTime'
+        , type: 'datetime'
+        ,trigger: 'click' //采用click弹出
+        , min:  new Date().toString()
+    });
+</script>
+
+<script type="text/javascript">
+    //起点地图加载
+    var marker, map = new AMap.Map("startAddressBody", {
+        resizeEnable: true,
+        zoom: 15,
+        zooms: [3, 20]
+    }); //定位标注当前位置
+    map.plugin('AMap.Geolocation', function () {
+        geolocation = new AMap.Geolocation({
+            enableHighAccuracy: true, //是否使用高精度定位,默认:true
+            timeout: 10000, //超过10秒后停止定位,默认:无穷大
+            maximumAge: 0, //定位结果缓存0毫秒,默认:0
+            convert: true, //自动偏移坐标,偏移后的坐标为高德坐标,默认:true
+            showButton: true, //显示定位按钮,默认:true
+            showMarker: true, //定位成功后在定位到的位置显示点标记,默认:true
+            showCircle: true, //定位成功后用圆圈表示定位精度范围,默认:true
+            panToLocation: true, //定位成功后将定位到的位置作为地图中心点,默认:true
+            buttonPosition: 'LB', //定位按钮的停靠位置  LB左下角、  RB右下角
+            buttonOffset: new AMap.Pixel(10, 20), //定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
+            zoomToAccuracy: true, //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
+        });
+        map.addControl(geolocation);
+        geolocation.getCurrentPosition();
+        AMap.event.addListener(geolocation, 'complete', onComplete);
+        //返回定位信息
+        AMap.event.addListener(geolocation, 'error', onError);
+        //返回定位出错信息
+    }); //解析定位结果
+    var city;
+
+
+    map.on('click', function (e) {
+        if (marker != null) {
+            marker.setMap(null);
+        }
+        //添加标记点
+        $("#startLon").val(e.lnglat.getLng());
+        $("#startLat").val(e.lnglat.getLat());
+         marker = new AMap.Marker({
+            map: map,
+            position: new AMap.LngLat(e.lnglat.getLng(), e.lnglat.getLat()),   // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
+        });
+        regeoCode(e.lnglat.getLng(),e.lnglat.getLat());
+    });
+
+
+    var infoWindow = new AMap.InfoWindow({
+        autoMove: true,
+        offset: {
+            x: 0,
+            y: -30
+        }
+    }); //回调函数
+
+
+    //根据经纬度获取详细地址
+    function regeoCode(lon,lat) {
+
+        var lnglat = [];
+        lnglat.push(lon);
+        lnglat.push(lat);
+        map.add(marker);
+        marker.setPosition(lnglat);
+
+        AMap.service('AMap.Geocoder', function() {
+            geocoder = new AMap.Geocoder({});
+            geocoder.getAddress(lnglat, function (status, result) {
+                if (status === 'complete' && result.regeocode) {
+                    var address = result.regeocode.formattedAddress;
+                    $("#startAddress").val(address);
+                } else {
+                    Feng.error('根据经纬度查询地址失败【' + result + '】')
+                    return
+                }
+                var data={
+                    "name":result.regeocode.addressComponent.neighborhood,
+                    "location":{
+                        "lat":lat,
+                        "lng":lon
+                    },
+                    "address":address,
+                    "tel":"",
+                    "type":result.regeocode.addressComponent.neighborhoodType
+                };
+                infoWindow.setContent(createContent(data));
+                infoWindow.open(map, marker.getPosition());
+            });
+        })
+    }
+
+
+
+    function onComplete(data) {
+        var str = [];
+        city = data.addressComponent.citycode;
+        str.push('定位结果:' + data.position);
+        str.push('定位类别:' + data.location_type);
+        if (data.accuracy) {
+            str.push('精度:' + data.accuracy + ' 米');
+        }
+        //如为IP精确定位结果则没有精度信息
+        str.push('是否经过偏移:' + (data.isConverted ? '是' : '否'));
+        var lnglatXY = [data.position.getLng(), data.position.getLat()];
+        //地图上所标点的坐标
+        AMap.service('AMap.Geocoder', function () {
+            //回调函数
+            geocoder = new AMap.Geocoder({});
+            geocoder.getAddress(lnglatXY, function (status, result) {
+                if (status === 'complete' && result.info === 'OK') {
+                    //获得了有效的地址信息:                    //即,result.regeocode.formattedAddress
+//                     console.log(result.regeocode.formattedAddress);
+                    var address = result.regeocode.formattedAddress;
+                    str.push('详细地址:' + address);
+                    // todo 不弹出信息框
+                    // alert(str.join(' | '));
+                } else {
+                    // alert(str.join(' | ')); //获取地址失败
+                }
+            });
+        })
+    } //解析定位错误信息
+    function onError(data) {
+        alert('定位失败,原因:' + data.message);
+    }
+
+    //输入搜索点信息
+    var autoOptions = {
+        city: city, //在规定城市搜索、默认全国
+        input: "startAddress"
+    };
+
+    var auto = new AMap.Autocomplete(autoOptions);
+    var placeSearch = new AMap.PlaceSearch({
+        pageSize: 5, // 单页显示结果条数
+        pageIndex: 1, // 页码
+        children: 0, //不展示子节点数据
+        city: city, // 兴趣点城市
+        citylimit: true, //是否强制限制在设置的城市内搜索
+        panel: "panel", // 结果列表将在此容器中进行展示。
+        autoFitView: true, // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围
+        extensions: 'base', //返回基本地址信息  */
+        map: map // 展现结果的地图实例
+    }); //构造地点查询类
+
+    AMap.event.addListener(auto, "select", select); //注册监听,当选中某条记录时会触发
+    function select(e) {
+        placeSearch.setCity(e.poi.adcode);
+        placeSearch.search(e.poi.name); //关键字查询查询        //设置搜索位置定点标注
+        if (e.poi && e.poi.location) {
+            map.setZoom(15);
+            map.setCenter(e.poi.location);
+            var id = e.poi.id; //详情查询
+            placeSearch.getDetails(id, function (status, result) {
+                if (status === 'complete' && result.info === 'OK') {
+                    placeSearch_CallBack(result);
+                }
+            });
+        }
+    }
+
+    function placeSearch_CallBack(data) {
+        if (marker != null) {
+            marker.setMap(null);
+        }
+        var poiArr = data.poiList.pois; //添加marker
+          marker = new AMap.Marker({
+            map: map,
+            position: poiArr[0].location
+        });
+
+        map.add(marker);
+        marker.setPosition(marker.getPosition());
+
+        infoWindow.setContent(createContent(poiArr[0]));
+        infoWindow.open(map, marker.getPosition());
+    }
+
+    function createContent(poi) {
+        console.log(poi);
+        //信息窗体内容
+        $("#startAddress").val(poi.address);
+        $("#startLon").val(poi.location.lng);
+        $("#startLat").val(poi.location.lat);
+        $("#areaCode").val(poi.adcode);
+
+        var s = [];
+        s.push("<b>名称:" + poi.name + "</b>");
+        s.push("地址:" + poi.address);
+        s.push("电话:" + poi.tel);
+        s.push("类型:" + poi.type);
+        return s.join("<br>");
+    }
+</script>
+
+<script>
+    //终点地图加载
+    var marker1, mapp = new AMap.Map("endAddressBody", {
+        resizeEnable: true,
+        zoom: 15,
+        zooms: [3, 20]
+    }); //定位标注当前位置
+    mapp.plugin('AMap.Geolocation', function () {
+        geolocation = new AMap.Geolocation({
+            enableHighAccuracy: true, //是否使用高精度定位,默认:true
+            timeout: 10000, //超过10秒后停止定位,默认:无穷大
+            maximumAge: 0, //定位结果缓存0毫秒,默认:0
+            convert: true, //自动偏移坐标,偏移后的坐标为高德坐标,默认:true
+            showButton: true, //显示定位按钮,默认:true
+            showMarker: true, //定位成功后在定位到的位置显示点标记,默认:true
+            showCircle: true, //定位成功后用圆圈表示定位精度范围,默认:true
+            panToLocation: true, //定位成功后将定位到的位置作为地图中心点,默认:true
+            buttonPosition: 'LB', //定位按钮的停靠位置  LB左下角、  RB右下角
+            buttonOffset: new AMap.Pixel(10, 20), //定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
+            zoomToAccuracy: true, //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
+        });
+        mapp.addControl(geolocation);
+        geolocation.getCurrentPosition();
+        AMap.event.addListener(geolocation, 'complete', onComplete);
+        //返回定位信息
+        AMap.event.addListener(geolocation, 'error', onError);
+        //返回定位出错信息
+    }); //解析定位结果
+    var cityy;
+
+    mapp.on('click', function (e) {
+        if (marker1 != null) {
+            marker1.setMap(null);
+        }
+        //添加标记点
+        $("#startLon").val(e.lnglat.getLng());
+        $("#startLat").val(e.lnglat.getLat());
+        marker1 = new AMap.Marker({
+            map: mapp,
+            position: new AMap.LngLat(e.lnglat.getLng(), e.lnglat.getLat()),   // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
+        });
+        regeoCode1(e.lnglat.getLng(),e.lnglat.getLat());
+    });
+
+
+    var infoWindow = new AMap.InfoWindow({
+        autoMove: true,
+        offset: {
+            x: 0,
+            y: -30
+        }
+    }); //回调函数
+
+
+    //根据经纬度获取详细地址
+    function regeoCode1(lon,lat) {
+
+        var lnglat = [];
+        lnglat.push(lon);
+        lnglat.push(lat);
+        mapp.add(marker1);
+        marker1.setPosition(lnglat);
+
+        AMap.service('AMap.Geocoder', function() {
+            geocoder = new AMap.Geocoder({});
+            geocoder.getAddress(lnglat, function (status, result) {
+                if (status === 'complete' && result.regeocode) {
+                    var address = result.regeocode.formattedAddress;
+                    $("#endAddress").val(address);
+                } else {
+                    Feng.error('根据经纬度查询地址失败【' + result + '】')
+                    return
+                }
+                var data={
+                    "name":result.regeocode.addressComponent.neighborhood,
+                    "location":{
+                        "lat":lat,
+                        "lng":lon
+                    },
+                    "address":address,
+                    "tel":"",
+                    "type":result.regeocode.addressComponent.neighborhoodType
+                };
+
+                infoWindow.setContent(createContentt(data));
+                infoWindow.open(mapp, marker1.getPosition());
+            });
+        })
+    }
+
+
+
+
+
+    function onComplete(data) {
+        var str = [];
+        cityy = data.addressComponent.citycode;
+        str.push('定位结果:' + data.position);
+        str.push('定位类别:' + data.location_type);
+        if (data.accuracy) {
+            str.push('精度:' + data.accuracy + ' 米');
+        }
+        //如为IP精确定位结果则没有精度信息
+        str.push('是否经过偏移:' + (data.isConverted ? '是' : '否'));
+        var lnglatXY = [data.position.getLng(), data.position.getLat()];
+        //地图上所标点的坐标
+        AMap.service('AMap.Geocoder', function () {
+            //回调函数
+            geocoder = new AMap.Geocoder({});
+            geocoder.getAddress(lnglatXY, function (status, result) {
+                if (status === 'complete' && result.info === 'OK') {
+                    //获得了有效的地址信息:                    //即,result.regeocode.formattedAddress
+                    //                     console.log(result.regeocode.formattedAddress);
+                    var address = result.regeocode.formattedAddress;
+                    str.push('详细地址:' + address);
+// todo 不弹出信息框
+// alert(str.join(' | '));
+                } else {
+// alert(str.join(' | ')); //获取地址失败
+                }
+            });
+        })
+    } //解析定位错误信息
+    function onError(data) {
+        alert('定位失败,原因:' + data.message);
+    }
+
+    //输入搜索点信息
+    var autoOptionss = {
+        city: cityy, //在规定城市搜索、默认全国
+        input: "endAddress"
+    };
+    var autoo = new AMap.Autocomplete(autoOptionss);
+    var placeSearchh = new AMap.PlaceSearch({
+        pageSize: 5, // 单页显示结果条数
+        pageIndex: 1, // 页码
+        children: 0, //不展示子节点数据
+        city: city, // 兴趣点城市
+        citylimit: true, //是否强制限制在设置的城市内搜索
+        panel: "panel", // 结果列表将在此容器中进行展示。
+        autoFitView: true, // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围
+        extensions: 'base', //返回基本地址信息  */
+        map: mapp // 展现结果的地图实例
+    }); //构造地点查询类
+    AMap.event.addListener(autoo, "select", selectt); //注册监听,当选中某条记录时会触发
+
+    function selectt(e) {
+        placeSearchh.setCity(e.poi.adcode);
+        placeSearchh.search(e.poi.name); //关键字查询查询        //设置搜索位置定点标注
+        if (e.poi && e.poi.location) {
+            mapp.setZoom(15);
+            mapp.setCenter(e.poi.location);
+            var id = e.poi.id; //详情查询
+            placeSearchh.getDetails(id, function (status, result) {
+                if (status === 'complete' && result.info === 'OK') {
+                    placeSearch_CallBackk(result);
+                }
+            });
+        }
+    }
+
+    function placeSearch_CallBackk(data) {
+        if (marker1 != null) {
+            marker1.setMap(null);
+        }
+        var poiArr = data.poiList.pois; //添加marker
+        marker1 = new AMap.Marker({
+            map: mapp,
+            position: poiArr[0].location
+        });
+
+        mapp.add(marker1);
+        marker1.setPosition(marker1.getPosition());
+
+        infoWindow.setContent(createContentt(poiArr[0]));
+        infoWindow.open(mapp, marker1.getPosition());
+    }
+
+    function createContentt(poi) {
+        console.log(poi);
+        //信息窗体内容
+        $("#endAddress").val(poi.address);
+        $("#endLon").val(poi.location.lng);
+        $("#endLat").val(poi.location.lat);
+        $("#areaCode").val(poi.adcode);
+
+        var ss = [];
+        ss.push("<b>名称:" + poi.name + "</b>");
+        ss.push("地址:" + poi.address);
+        ss.push("电话:" + poi.tel);
+        ss.push("类型:" + poi.type);
+        return ss.join("<br>");
+    }
+</script>
+@}
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalPayOrderCar/tOrderPrivateCar_trajectory.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalPayOrderCar/tOrderPrivateCar_trajectory.html
new file mode 100644
index 0000000..a2465eb
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tAbnormalPayOrderCar/tOrderPrivateCar_trajectory.html
@@ -0,0 +1,57 @@
+@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="${tOrderPrivateCarId}">
+            <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 type="text/javascript">
+	window._AMapSecurityConfig = {
+		securityJsCode: '44c5ee9ad584605d91ca69bfac32c761',
+	}
+</script>
+<script src="https://webapi.amap.com/maps?v=1.4.8&key=d3bde6afb050067e1a765a8d1d1f4c54"></script>
+<script src="https://cache.amap.com/lbs/static/addToolbar.js"></script>
+<script src="${ctxPath}/static/modular/system/tOrderPrivateCar/tOrderPrivateCar_info.js"></script>
+@}
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderCrossCity/tOrderCrossCity.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderCrossCity/tOrderCrossCity.html
index e3a09d2..e187ec5 100644
--- a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderCrossCity/tOrderCrossCity.html
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderCrossCity/tOrderCrossCity.html
@@ -73,6 +73,24 @@
                                     <option value="12">取消待支付</option>
                                 </#SelectCon>
                             </div>
+                                    <div class="col-sm-3">
+                                        <#SelectCon id="abnormal" name="是否异常订单" >
+                                        <option value="">全部</option>
+                                        <option value="1">否</option>
+                                        <option value="2">是</option>
+                                    </#SelectCon>
+                                </div>
+
+                                <div class="col-sm-3">
+                                    <#SelectCon id="promotion" name="是否推广订单" >
+                                    <option value="">全部</option>
+                                    <option value="1">否</option>
+                                    <option value="2">是</option>
+                                </#SelectCon>
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="promotionUser" name="推广员姓名" />
+                            </div>
                             <div class="col-sm-3">
                                 <#button name="搜索" icon="fa-search" clickFun="TOrderCrossCity.search()"/>
                                 <#button name="重置" icon="fa-trash" clickFun="TOrderCrossCity.resetSearch()" space="true"/>
@@ -91,6 +109,8 @@
                             @if(shiro.hasPermission("/tOrderCrossCity/delete")){
                                 <#button name="删除记录" icon="fa-remove" clickFun="TOrderCrossCity.delete()" space="true"/>
                             @}
+
+                            <#button name="导出Excel" icon="fa-remove" clickFun="TOrderCrossCity.exportExcel()()" space="true"/>
                         </div>
                         <#table id="TOrderCrossCityTable"/>
                     </div>
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderCrossCity/tOrderCrossCity_detail.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderCrossCity/tOrderCrossCity_detail.html
index 6cca06d..ef04645 100644
--- a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderCrossCity/tOrderCrossCity_detail.html
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderCrossCity/tOrderCrossCity_detail.html
@@ -99,6 +99,73 @@
                     </div>
                 </div>
             </div>
+
+
+
+
+            <div class="row" style="margin-top: 30px;">
+                <div class="col-sm-8">
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">行程录音:</label>
+                        <div class="col-sm-10">
+                            <audio src="${item.voice}" controls="controls">
+                                您的浏览器不支持 audio 标签。
+                            </audio>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <!--            是否异常订单-->
+            <div class="row" style="margin-top: 30px;">
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="font-weight: 700;">是否异常订单</h6>
+                </div>
+                <div class="col-sm-1">
+                    @if(item.abnormal == 2){
+                    <h6 class="h3Class" style="margin-left: 10%">是</h4>
+                        @}else{
+                        <h6 class="h3Class" style="margin-left: 10%">否</h4>
+                            @}
+                </div>
+
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="font-weight: 700;">处理结果</h6>
+                </div>
+                <div class="col-sm-1">
+                    @if(item.responsibilityType == 1){
+                    <h6 class="h3Class" style="margin-left: 10%">平台全责</h4>
+                        @}else if(item.responsibilityType == 2){
+                        <h6 class="h3Class" style="margin-left: 10%">司机全责</h4>
+                            @}else if(item.responsibilityType == 3){
+                            <h6 class="h3Class" style="margin-left: 10%">乘客全责</h4>
+                                @}else if( item.responsibilityType == 4){
+                                <h6 class="h3Class" style="margin-left: 10%">平台部分</h4>
+                                    @} else if( item.responsibilityType == 5){
+                                    <h6 class="h3Class" style="margin-left: 10%">司机部分</h4>
+                                        @}
+                </div>
+
+
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="font-weight: 700;">修改订单价格为:</h6>
+                </div>
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="margin-left: 10%">${item.responsibilityMoney}</h4>
+                </div>
+
+
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="font-weight: 700;">是否推广订单</h6>
+                </div>
+                <div class="col-sm-1">
+                    @if(item.promotion == 2){
+                    <h6 class="h3Class" style="margin-left: 10%">是</h4>
+                        @}else{
+                        <h6 class="h3Class" style="margin-left: 10%">否</h4>
+                            @}
+                </div>
+            </div>
+
         </div>
 
     </div>
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar.html
index 94e10fa..4aa90ce 100644
--- a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar.html
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar.html
@@ -73,7 +73,27 @@
                                     <option value="3">拼车订单</option>
                                 </#SelectCon>
                             </div>
+
+
                             <div class="col-sm-3">
+                                <#SelectCon id="abnormal" name="是否异常订单" >
+                                <option value="">全部</option>
+                                <option value="1">否</option>
+                                <option value="2">是</option>
+                                </#SelectCon>
+                            </div>
+
+                            <div class="col-sm-3">
+                                <#SelectCon id="promotion" name="是否推广订单" >
+                                <option value="">全部</option>
+                                <option value="1">否</option>
+                                <option value="2">是</option>
+                                </#SelectCon>
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="promotionUser" name="推广员姓名" />
+                            </div>
+                                    <div class="col-sm-3">
                                 <#button name="搜索" icon="fa-search" clickFun="TOrderPrivateCar.search()"/>
                                 <#button name="重置" icon="fa-trash" clickFun="TOrderPrivateCar.resetSearch()" space="true"/>
                             </div>
@@ -94,6 +114,9 @@
                             @if(shiro.hasPermission("/tOrderPrivateCar/addOrder")){
                             <#button name="添加订单" icon="fa-plus" clickFun="TOrderPrivateCar.addOrder()" space="true"/>
                             @}
+                            @if(shiro.hasPermission("/tOrderPrivateCar/addOrder")){
+                            <#button name="导出Excel" icon="" clickFun="TOrderPrivateCar.exportExcel()" space="true"/>
+                            @}
                         </div>
                         <#table id="TOrderPrivateCarTable"/>
                     </div>
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar_orderDetail.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar_orderDetail.html
index 99d8e6e..601a472 100644
--- a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar_orderDetail.html
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar_orderDetail.html
@@ -191,6 +191,71 @@
                 </div>
             </div>
 
+
+            <div class="row" style="margin-top: 30px;">
+                <div class="col-sm-8">
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">行程录音:</label>
+                        <div class="col-sm-10">
+                            <audio src="${item.voice}" controls="controls">
+                                您的浏览器不支持 audio 标签。
+                            </audio>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <!--            是否异常订单-->
+            <div class="row" style="margin-top: 30px;">
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="font-weight: 700;">是否异常订单</h6>
+                </div>
+                <div class="col-sm-1">
+                    @if(item.abnormal == 2){
+                    <h6 class="h3Class" style="margin-left: 10%">是</h4>
+                        @}else{
+                        <h6 class="h3Class" style="margin-left: 10%">否</h4>
+                            @}
+                </div>
+
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="font-weight: 700;">处理结果</h6>
+                </div>
+                <div class="col-sm-1">
+                    @if(item.responsibilityType == 1){
+                    <h6 class="h3Class" style="margin-left: 10%">平台全责</h4>
+                        @}else if(item.responsibilityType == 2){
+                        <h6 class="h3Class" style="margin-left: 10%">司机全责</h4>
+                            @}else if(item.responsibilityType == 3){
+                            <h6 class="h3Class" style="margin-left: 10%">乘客全责</h4>
+                                @}else if( item.responsibilityType == 4){
+                                <h6 class="h3Class" style="margin-left: 10%">平台部分</h4>
+                                    @} else if( item.responsibilityType == 5){
+                                    <h6 class="h3Class" style="margin-left: 10%">司机部分</h4>
+                                        @}
+                </div>
+
+
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="font-weight: 700;">修改订单价格为:</h6>
+                </div>
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="margin-left: 10%">${item.responsibilityMoney}</h4>
+                </div>
+
+
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="font-weight: 700;">是否推广订单</h6>
+                </div>
+                <div class="col-sm-1">
+                    @if(item.promotion == 2){
+                    <h6 class="h3Class" style="margin-left: 10%">是</h4>
+                        @}else{
+                        <h6 class="h3Class" style="margin-left: 10%">否</h4>
+                            @}
+                </div>
+            </div>
+
+
         </div>
     </div>
 </div>
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTaxi/tOrderTaxi.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTaxi/tOrderTaxi.html
index 3964487..d51b4ca 100644
--- a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTaxi/tOrderTaxi.html
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTaxi/tOrderTaxi.html
@@ -58,6 +58,26 @@
                                     <option value="12">取消待支付</option>
                                 </#SelectCon>
                             </div>
+
+                                    <div class="col-sm-3">
+                                        <#SelectCon id="abnormal" name="是否异常订单" >
+                                        <option value="">全部</option>
+                                        <option value="1">否</option>
+                                        <option value="2">是</option>
+                                    </#SelectCon>
+                                </div>
+
+                                <div class="col-sm-3">
+                                    <#SelectCon id="promotion" name="是否推广订单" >
+                                    <option value="">全部</option>
+                                    <option value="1">否</option>
+                                    <option value="2">是</option>
+                                </#SelectCon>
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="promotionUser" name="推广员姓名" />
+                            </div>
+
                             <div class="col-sm-3">
                                 <#button name="搜索" icon="fa-search" clickFun="TOrderTaxi.search()"/>
                                 <#button name="重置" icon="fa-trash" clickFun="TOrderTaxi.resetSearch()" space="true"/>
@@ -82,6 +102,8 @@
                             @if(shiro.hasPermission("/tOrderTaxi/tOrderTaxi_add")){
                             <#button name="添加订单" icon="fa-plus" clickFun="TOrderTaxi.openAddTOrderTaxi()" space="true"/>
                             @}
+
+                            <#button name="导出Excel" icon="" clickFun="TOrderTaxi.exportExcel()" space="true"/>
                         </div>
                         <#table id="TOrderTaxiTable"/>
                     </div>
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTaxi/tOrderTaxi_edit.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTaxi/tOrderTaxi_edit.html
index df104e1..b7dbff0 100644
--- a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTaxi/tOrderTaxi_edit.html
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderTaxi/tOrderTaxi_edit.html
@@ -1,5 +1,5 @@
 @layout("/common/_container.html"){
-<style type="text/css">
+<style type="text/css" xmlns="http://www.w3.org/1999/html">
     html, body, #container {
         height: 100%;
         width: 100%;
@@ -126,8 +126,73 @@
                 </div>
             </div>
 
+
+            <div class="row" style="margin-top: 30px;">
+                <div class="col-sm-8">
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">行程录音:</label>
+                        <div class="col-sm-10">
+                            <audio src="${item.voice}" controls="controls">
+                                您的浏览器不支持 audio 标签。
+                            </audio>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <!--            是否异常订单-->
+            <div class="row" style="margin-top: 30px;">
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="font-weight: 700;">是否异常订单</h6>
+                </div>
+                <div class="col-sm-1">
+                    @if(item.abnormal == 2){
+                    <h6 class="h3Class" style="margin-left: 10%">是</h4>
+                    @}else{
+                    <h6 class="h3Class" style="margin-left: 10%">否</h4>
+                    @}
+                 </div>
+
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="font-weight: 700;">处理结果</h6>
+                </div>
+                <div class="col-sm-1">
+                    @if(item.responsibilityType == 1){
+                    <h6 class="h3Class" style="margin-left: 10%">平台全责</h4>
+                    @}else if(item.responsibilityType == 2){
+                    <h6 class="h3Class" style="margin-left: 10%">司机全责</h4>
+                    @}else if(item.responsibilityType == 3){
+                    <h6 class="h3Class" style="margin-left: 10%">乘客全责</h4>
+                    @}else if( item.responsibilityType == 4){
+                    <h6 class="h3Class" style="margin-left: 10%">平台部分</h4>
+                    @} else if( item.responsibilityType == 5){
+                    <h6 class="h3Class" style="margin-left: 10%">司机部分</h4>
+                    @}
+                </div>
+
+
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="font-weight: 700;">修改订单价格为:</h6>
+                </div>
+                <div class="col-sm-1">
+                     <h6 class="h3Class" style="margin-left: 10%">${item.responsibilityMoney}</h4>
+                </div>
+
+
+                <div class="col-sm-1">
+                    <h6 class="h3Class" style="font-weight: 700;">是否推广订单</h6>
+                </div>
+                <div class="col-sm-1">
+                    @if(item.promotion == 2){
+                    <h6 class="h3Class" style="margin-left: 10%">是</h4>
+                        @}else{
+                        <h6 class="h3Class" style="margin-left: 10%">否</h4>
+                            @}
+                </div>
         </div>
 
+
+</div>
+
     </div>
 </div>
 <script src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script>
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tAbnormalOrderCar/tAbnormalOrder.js b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tAbnormalOrderCar/tAbnormalOrder.js
new file mode 100644
index 0000000..cf8c64b
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tAbnormalOrderCar/tAbnormalOrder.js
@@ -0,0 +1,478 @@
+/**
+ * 快车订单管理初始化
+ */
+var TAbnormalOrder = {
+    id: "TOrderPrivateCarTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1
+};
+
+/**
+ * 初始化表格的列
+ */
+TAbnormalOrder.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: 'rideType', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.rideType != '' && row.rideType != null) {
+                    if (row.rideType == 1){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="独享订单" onfocus="TUser.tooltip()">独享订单</p>']
+                    } else if (row.rideType == 2){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="一口价订单" onfocus="TUser.tooltip()">一口价订单</p>']
+                    } else if (row.rideType == 3){
+                        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: 'serverCarModelName', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.serverCarModelName != '' && row.serverCarModelName != null) {
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.serverCarModelName + '" onfocus="TUser.tooltip()">' + row.serverCarModelName + '</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;
+            }
+        },
+        {title: '是否异常订单', field: 'abnormal', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                return {1:"否",2:"是"}[value];
+            }
+        },
+        {title: '是否推广订单', field: 'promotion', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                return {1:"否",2:"是"}[value];
+            }
+        },
+        {title: '推广员姓名', field: 'promotionUser', visible: true, align: 'center', valign: 'middle',
+
+        },
+        {title: '推广员电话', field: 'promotionPhone', visible: true, align: 'center', valign: 'middle',
+
+        },
+    ];
+};
+
+/**
+ * 检查是否选中
+ */
+TAbnormalOrder.check = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length == 0){
+        Feng.info("请先选中表格中的某一记录!");
+        return false;
+    }else{
+        TAbnormalOrder.seItem = selected[0];
+        return true;
+    }
+};
+
+/**
+ * 添加快车订单
+ */
+TAbnormalOrder.addOrder =function(){
+    var index = layer.open({
+        type: 2,
+        title: '添加快车订单',
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/tOrderPrivateCar/tOrderPrivateCar_addOrder'
+    });
+    this.layerIndex = index;
+
+};
+
+/**
+ * 打开查看快车订单详情
+ */
+TAbnormalOrder.orderDetail = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title: '异常订单详情',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/abnormal/tOrderPrivateCar_orderDetail?tOrderPrivateCarId=' + TAbnormalOrder.seItem.id+'&type='+$("#type").val()
+        });
+        this.layerIndex = index;
+    }
+};
+
+
+/**
+ * 订单轨迹
+ */
+TAbnormalOrder.trajectory = function(){
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title: '快车订单轨迹',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tOrderPrivateCar/tOrderPrivateCar_trajectory/' + TAbnormalOrder.seItem.id
+        });
+        this.layerIndex = index;
+    }
+}
+
+
+/**
+ * 删除快车订单
+ */
+TAbnormalOrder.deleteOrder = function () {
+    if (this.check()) {
+        var orderNum = TAbnormalOrder.seItem.orderNum;
+        if (orderNum == "" || orderNum == null || orderNum == undefined) {
+            orderNum = "该订单";
+        } else {
+            orderNum = "【" + orderNum + "】";
+        }
+        if (TAbnormalOrder.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 + "/tOrderPrivateCar/delete", function (data) {
+                swal("删除成功", "您已经删除了" + orderNum + "。", "success");
+                TAbnormalOrder.table.refresh();
+            }, function (data) {
+                swal("删除失败", data.responseJSON.message + "!", "warning");
+            });
+            ajax.set("tOrderPrivateCarId", TAbnormalOrder.seItem.id);
+            ajax.start();
+        });
+    }
+};
+
+
+
+
+
+/**
+ * 查询快车订单列表
+ */
+TAbnormalOrder.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();
+    queryData['rideType'] = $('#rideType').val();
+    queryData['promotionUser'] = $("#promotionUser").val();
+    queryData['abnormal'] = $("#abnormal").val();
+    queryData['promotion'] = $("#promotion").val();
+    queryData['type'] = $("#type").val();
+    queryData['abnormalStatus'] = $("#abnormalStatus").val();
+    TAbnormalOrder.table.refresh({query: queryData});
+};
+
+TAbnormalOrder.exportExcel=function (){
+    let p = "";
+    let insertTime = $('#insertTime').val();
+    let orderNum = $('#orderNum').val();
+    let orderSource = $('#orderSource').val();
+    let userName = $('#userName').val();
+    let userPhone = $('#userPhone').val();
+    let passengers = $('#passengers').val();
+    let passengersPhone = $('#passengersPhone').val();
+    let serverCarModelId = $('#serverCarModelId').val();
+    let driver = $('#driver').val();
+    let state = $('#state').val();
+    let rideType = $('#rideType').val();
+    let promotionUser = $('#promotionUser').val();
+    let abnormal = $('#abnormal').val();
+    let promotion = $('#promotion').val();
+    let type = $('#type').val();
+    let abnormalStatus = $('#abnormalStatus').val();
+    if(null != insertTime && '' != insertTime){
+        p += "insertTime=" + insertTime + "&";
+    }
+    if(null != orderNum && '' != orderNum){
+        p += "orderNum=" + orderNum + "&";
+    }
+    if(null != orderSource && '' != orderSource){
+        p += "orderSource=" + orderSource + "&";
+    }
+    if(null != userName && '' != userName){
+        p += "userName=" + userName + "&" ;
+    }
+    if(null != userPhone && '' != userPhone){
+        p += "userPhone=" + userPhone + "&" ;
+    }
+    if(null != passengers && '' != passengers){
+        p += "passengers=" + passengers + "&" ;
+    }
+    if(null != passengersPhone && '' != passengersPhone){
+        p += "passengersPhone=" + passengersPhone + "&" ;
+    }
+    if(null != serverCarModelId && '' != serverCarModelId){
+        p += "serverCarModelId=" + serverCarModelId + "&" ;
+    }
+    if(null != driver && '' != driver){
+        p += "driver=" + driver + "&" ;
+    }
+    if(null != rideType && '' != rideType){
+        p += "rideType=" + rideType + "&" ;
+    }
+    if(null != state && '' != state){
+        p += "state=" + state + "&" ;
+    }
+    if(null != promotionUser && '' != promotionUser){
+        p += "promotionUser=" + promotionUser + "&" ;
+    }
+    if(null != abnormal && '' != abnormal){
+        p += "abnormal=" + abnormal + "&" ;
+    }
+    if(null != promotion && '' != promotion){
+        p += "promotion=" + promotion + "&" ;
+    }
+    if(null != type && '' != type){
+        p += "type=" + type + "&" ;
+    }
+    if(null != abnormalStatus && '' != abnormalStatus){
+        p += "abnormalStatus=" + abnormalStatus + "&" ;
+    }
+    if('' != p){
+        p = "?" + p.substring(0, p.length - 1);
+    }
+    console.log('p['+p+']')
+    window.location.href = Feng.ctxPath + '/abnormal/export' + p;
+}
+
+
+
+TAbnormalOrder.resetSearch = function () {
+    $("#insertTime").val("");
+    $("#orderNum").val("");
+    $("#orderSource").val("");
+    $("#userName").val("");
+    $("#userPhone").val("");
+    $("#passengers").val("");
+    $("#passengersPhone").val("");
+    $("#serverCarModelId").val("");
+    $("#driver").val("");
+    $("#state").val("");
+    $('#rideType').val('');
+    $("#promotionUser").val("");
+    $("#abnormal").val("");
+    $("#promotion").val("");
+    $("#type").val("1");
+    $("#abnormalStatus").val("");
+    TAbnormalOrder.search();
+};
+
+
+
+$(function () {
+    var defaultColunms = TAbnormalOrder.initColumn();
+    var table = new BSTable(TAbnormalOrder.id, "/abnormal/list", defaultColunms);
+    table.setPaginationType("server");
+    TAbnormalOrder.table = table.init();
+});
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tAbnormalOrderCar/tAbnormalOrderCar_info.js b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tAbnormalOrderCar/tAbnormalOrderCar_info.js
new file mode 100644
index 0000000..5fdbf49
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tAbnormalOrderCar/tAbnormalOrderCar_info.js
@@ -0,0 +1,312 @@
+/**
+ * 初始化快车订单详情对话框
+ */
+var TOrderPrivateCarInfoDlg = {
+    tOrderPrivateCarInfoData: {}
+};
+
+/**
+ * 清除数据
+ */
+TOrderPrivateCarInfoDlg.clearData = function () {
+    this.tOrderPrivateCarInfoData = {};
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TOrderPrivateCarInfoDlg.set = function (key, val) {
+    this.tOrderPrivateCarInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val;
+    return this;
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TOrderPrivateCarInfoDlg.get = function (key) {
+    return $("#" + key).val();
+}
+
+/**
+ * 关闭此对话框
+ */
+TOrderPrivateCarInfoDlg.close = function () {
+    parent.layer.close(window.parent.TOrderPrivateCar.layerIndex);
+}
+
+/**
+ * 收集数据
+ */
+TOrderPrivateCarInfoDlg.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');
+}
+
+/**
+ * 提交添加
+ */
+TOrderPrivateCarInfoDlg.addSubmit = function () {
+
+    this.clearData();
+    this.collectData();
+
+    if ($("#startAddress").val() === ""){
+        Feng.error("请输入起点");
+        return false;
+    }
+    if ($("#endAddress").val() === ""){
+        Feng.error("请输入终点");
+        return false;
+    }
+    if ($("#travelTime").val() === ""){
+        Feng.error("请选择用车时间");
+        return false;
+    }
+    if ($("#passengers").val() === ""){
+        Feng.error("请输入乘车人姓名");
+        return false;
+    }
+    if ($("#passengersPhone").val() === ""){
+        Feng.error("请输入乘车人手机号");
+        return false;
+    }
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tOrderPrivateCar/add", function (data) {
+        Feng.success("添加成功!");
+        window.parent.TOrderPrivateCar.table.refresh();
+        TOrderPrivateCarInfoDlg.close();
+    }, function (data) {
+        Feng.error("添加失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set(this.tOrderPrivateCarInfoData);
+    ajax.start();
+}
+TOrderPrivateCarInfoDlg.save = function (){
+
+        const selectedBtn = document.querySelector('.duty-btn.active');
+        const responsibilityTypeVal = reverseTypeMap[selectedBtn.dataset.type];
+        const remark = document.querySelector('textarea[name=handleRemark]').value;
+        // 取money
+        const money = document.querySelector('input[name=money]').value;
+        const type = document.querySelector('input[name=type]').value;
+        const orderNum = document.querySelector('input[name=orderNum]').value;
+
+        console.log(type,orderNum)
+
+        //提交信息
+        var ajax = new $ax(Feng.ctxPath + "/abnormal/save", function(data){
+            Feng.success("操作成功!");
+        },function(data){
+            Feng.error("操作失败!");
+        });
+        ajax.set("responsibilityTypeVal",responsibilityTypeVal);
+        ajax.set("remark",remark);
+        ajax.set("money",money);
+        ajax.set("type",type);
+        ajax.set("orderNum",orderNum);
+        ajax.start();
+
+}
+/**
+ * 提交修改
+ */
+TOrderPrivateCarInfoDlg.editSubmit = function () {
+
+    this.clearData();
+    this.collectData();
+
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tOrderPrivateCar/update", function (data) {
+        Feng.success("修改成功!");
+        window.parent.TOrderPrivateCar.table.refresh();
+        TOrderPrivateCarInfoDlg.close();
+    }, function (data) {
+        Feng.error("修改失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set(this.tOrderPrivateCarInfoData);
+    ajax.start();
+}
+
+var map = new AMap.Map("container", {
+    resizeEnable: true,
+    zoom: 14
+});
+$(function () {
+    var type = $("#type").val();
+    if (type != 2) {
+        getTrajectory();
+    }
+});
+
+function getTrajectory() {
+    $.ajax({
+        url: Feng.ctxPath + '/tOrderPrivateCar/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();
+}
+
+/**
+ * 选择起点
+ */
+TOrderPrivateCarInfoDlg.startAddress = function () {
+    $("#startAddressModel").show();
+};
+
+
+/**
+ * 选择终点
+ */
+TOrderPrivateCarInfoDlg.endAddress = function () {
+    $("#endAddressModel").show();
+};
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tAbnormalPayOrderCar/tAbnormalOrder.js b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tAbnormalPayOrderCar/tAbnormalOrder.js
new file mode 100644
index 0000000..ef9c653
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tAbnormalPayOrderCar/tAbnormalOrder.js
@@ -0,0 +1,264 @@
+/**
+ * 快车订单管理初始化
+ */
+var TAbnormalOrder = {
+    id: "TOrderPrivateCarTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1
+};
+
+/**
+ * 初始化表格的列
+ */
+TAbnormalOrder.initColumn = function () {
+    return [
+        {field: 'selectItem', radio: true},
+        {title: '主键id', field: 'id', visible: false, align: 'center', valign: 'middle'},
+        {title: '生成时间', field: 'createTime', visible: true, align: 'center', valign: 'middle',width:'8%',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.createTime != '' && row.createTime != null) {
+                    var time = row.createTime.replace(" ",'<br>');
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.createTime + '" 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: 'payMoney', visible: true, align: 'center', valign: 'middle',
+        },
+        {title: '支付状态', field: 'payStatus', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                return {1: '未支付', 2: '已支付'}[value];
+            }
+        },
+        {title: '支付时间', field: 'payTime', visible: true, align: 'center', valign: 'middle',width:'10%',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.payTime != '' && row.payTime != null) {
+                    var time = row.payTime.replace(" ",'<br>');
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.payTime + '" onfocus="TUser.tooltip()">' + time + '</p>']
+                }
+                return btn;
+            }
+        },
+        {title: '用户id', field: 'userId', visible: false, align: 'center', valign: 'middle'},
+        {title: '用户昵称', 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: '联系电话', 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;
+            }
+        },
+    ];
+};
+
+/**
+ * 检查是否选中
+ */
+TAbnormalOrder.check = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length == 0){
+        Feng.info("请先选中表格中的某一记录!");
+        return false;
+    }else{
+        TAbnormalOrder.seItem = selected[0];
+        return true;
+    }
+};
+
+/**
+ * 添加快车订单
+ */
+TAbnormalOrder.addOrder =function(){
+    var index = layer.open({
+        type: 2,
+        title: '添加快车订单',
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/tOrderPrivateCar/tOrderPrivateCar_addOrder'
+    });
+    this.layerIndex = index;
+
+};
+
+/**
+ * 打开查看快车订单详情
+ */
+TAbnormalOrder.orderDetail = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title: '快车订单详情',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tOrderPrivateCar/tOrderPrivateCar_orderDetail/' + TAbnormalOrder.seItem.id
+        });
+        this.layerIndex = index;
+    }
+};
+
+
+/**
+ * 订单轨迹
+ */
+TAbnormalOrder.trajectory = function(){
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title: '快车订单轨迹',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tOrderPrivateCar/tOrderPrivateCar_trajectory/' + TAbnormalOrder.seItem.id
+        });
+        this.layerIndex = index;
+    }
+}
+
+
+/**
+ * 删除快车订单
+ */
+TAbnormalOrder.deleteOrder = function () {
+    if (this.check()) {
+        var orderNum = TAbnormalOrder.seItem.orderNum;
+        if (orderNum == "" || orderNum == null || orderNum == undefined) {
+            orderNum = "该订单";
+        } else {
+            orderNum = "【" + orderNum + "】";
+        }
+        if (TAbnormalOrder.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 + "/tOrderPrivateCar/delete", function (data) {
+                swal("删除成功", "您已经删除了" + orderNum + "。", "success");
+                TAbnormalOrder.table.refresh();
+            }, function (data) {
+                swal("删除失败", data.responseJSON.message + "!", "warning");
+            });
+            ajax.set("tOrderPrivateCarId", TAbnormalOrder.seItem.id);
+            ajax.start();
+        });
+    }
+};
+
+/**
+ * 查询快车订单列表
+ */
+TAbnormalOrder.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();
+    queryData['rideType'] = $('#rideType').val();
+    queryData['promotionUser'] = $("#promotionUser").val();
+    queryData['abnormal'] = $("#abnormal").val();
+    queryData['promotion'] = $("#promotion").val();
+    queryData['type'] = $("#type").val();
+    queryData['abnormalStatus'] = $("#abnormalStatus").val();
+    TAbnormalOrder.table.refresh({query: queryData});
+};
+
+TAbnormalOrder.resetSearch = function () {
+    $("#insertTime").val("");
+    $("#orderNum").val("");
+    $("#orderSource").val("");
+    $("#userName").val("");
+    $("#userPhone").val("");
+    $("#passengers").val("");
+    $("#passengersPhone").val("");
+    $("#serverCarModelId").val("");
+    $("#driver").val("");
+    $("#state").val("");
+    $('#rideType').val('');
+    $("#promotionUser").val("");
+    $("#abnormal").val("");
+    $("#promotion").val("");
+    $("#type").val("1");
+    $("#abnormalStatus").val("");
+    TAbnormalOrder.search();
+};
+
+TAbnormalOrder.excelExport=function (){
+    let p = "";
+    let insertTime = $('#insertTime').val();
+    let orderNum = $('#orderNum').val();
+    let userName = $('#userName').val();
+    let userPhone = $('#userPhone').val();
+    let passengers = $('#passengers').val();
+    let passengersPhone = $('#passengersPhone').val();
+    let abnormalStatus = $('#abnormalStatus').val();
+    if(null != insertTime && '' != insertTime){
+        p += "insertTime=" + insertTime + "&";
+    }
+    if(null != orderNum && '' != orderNum){
+        p += "orderNum=" + orderNum + "&";
+    }
+    if(null != userName && '' != userName){
+        p += "userName=" + userName + "&" ;
+    }
+    if(null != userPhone && '' != userPhone){
+        p += "userPhone=" + userPhone + "&" ;
+    }
+    if(null != passengers && '' != passengers){
+        p += "passengers=" + passengers + "&" ;
+    }
+    if(null != passengersPhone && '' != passengersPhone){
+        p += "passengersPhone=" + passengersPhone + "&" ;
+    }
+    if(null != abnormalStatus && '' != abnormalStatus){
+        p += "abnormalStatus=" + abnormalStatus + "&" ;
+    }
+    if('' != p){
+        p = "?" + p.substring(0, p.length - 1);
+    }
+    console.log('p['+p+']')
+    window.location.href = Feng.ctxPath + '/abnormalPay/export' + p;
+}
+
+$(function () {
+    var defaultColunms = TAbnormalOrder.initColumn();
+    var table = new BSTable(TAbnormalOrder.id, "/abnormalPay/list", defaultColunms);
+    table.setPaginationType("server");
+    TAbnormalOrder.table = table.init();
+});
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tAbnormalPayOrderCar/tAbnormalOrderCar_info.js b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tAbnormalPayOrderCar/tAbnormalOrderCar_info.js
new file mode 100644
index 0000000..b26ba58
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tAbnormalPayOrderCar/tAbnormalOrderCar_info.js
@@ -0,0 +1,287 @@
+/**
+ * 初始化快车订单详情对话框
+ */
+var TOrderPrivateCarInfoDlg = {
+    tOrderPrivateCarInfoData: {}
+};
+
+/**
+ * 清除数据
+ */
+TOrderPrivateCarInfoDlg.clearData = function () {
+    this.tOrderPrivateCarInfoData = {};
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TOrderPrivateCarInfoDlg.set = function (key, val) {
+    this.tOrderPrivateCarInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val;
+    return this;
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TOrderPrivateCarInfoDlg.get = function (key) {
+    return $("#" + key).val();
+}
+
+/**
+ * 关闭此对话框
+ */
+TOrderPrivateCarInfoDlg.close = function () {
+    parent.layer.close(window.parent.TOrderPrivateCar.layerIndex);
+}
+
+/**
+ * 收集数据
+ */
+TOrderPrivateCarInfoDlg.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');
+}
+
+/**
+ * 提交添加
+ */
+TOrderPrivateCarInfoDlg.addSubmit = function () {
+
+    this.clearData();
+    this.collectData();
+
+    if ($("#startAddress").val() === ""){
+        Feng.error("请输入起点");
+        return false;
+    }
+    if ($("#endAddress").val() === ""){
+        Feng.error("请输入终点");
+        return false;
+    }
+    if ($("#travelTime").val() === ""){
+        Feng.error("请选择用车时间");
+        return false;
+    }
+    if ($("#passengers").val() === ""){
+        Feng.error("请输入乘车人姓名");
+        return false;
+    }
+    if ($("#passengersPhone").val() === ""){
+        Feng.error("请输入乘车人手机号");
+        return false;
+    }
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tOrderPrivateCar/add", function (data) {
+        Feng.success("添加成功!");
+        window.parent.TOrderPrivateCar.table.refresh();
+        TOrderPrivateCarInfoDlg.close();
+    }, function (data) {
+        Feng.error("添加失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set(this.tOrderPrivateCarInfoData);
+    ajax.start();
+}
+
+/**
+ * 提交修改
+ */
+TOrderPrivateCarInfoDlg.editSubmit = function () {
+
+    this.clearData();
+    this.collectData();
+
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tOrderPrivateCar/update", function (data) {
+        Feng.success("修改成功!");
+        window.parent.TOrderPrivateCar.table.refresh();
+        TOrderPrivateCarInfoDlg.close();
+    }, function (data) {
+        Feng.error("修改失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set(this.tOrderPrivateCarInfoData);
+    ajax.start();
+}
+
+var map = new AMap.Map("container", {
+    resizeEnable: true,
+    zoom: 14
+});
+$(function () {
+    var type = $("#type").val();
+    if (type != 2) {
+        getTrajectory();
+    }
+});
+
+function getTrajectory() {
+    $.ajax({
+        url: Feng.ctxPath + '/tOrderPrivateCar/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();
+}
+
+/**
+ * 选择起点
+ */
+TOrderPrivateCarInfoDlg.startAddress = function () {
+    $("#startAddressModel").show();
+};
+
+
+/**
+ * 选择终点
+ */
+TOrderPrivateCarInfoDlg.endAddress = function () {
+    $("#endAddressModel").show();
+};
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderCrossCity/tOrderCrossCity.js b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderCrossCity/tOrderCrossCity.js
index 3b9dd46..53c7c14 100644
--- a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderCrossCity/tOrderCrossCity.js
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderCrossCity/tOrderCrossCity.js
@@ -217,7 +217,23 @@
                 }
                 return btn;
             }
-        }
+        },
+        {title: '是否异常订单', field: 'abnormal', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                return {1:"否",2:"是"}[value];
+            }
+        },
+        {title: '是否推广订单', field: 'promotion', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                return {1:"否",2:"是"}[value];
+            }
+        },
+        {title: '推广员姓名', field: 'promotionUser', visible: true, align: 'center', valign: 'middle',
+
+        },
+        {title: '推广员电话', field: 'promotionPhone', visible: true, align: 'center', valign: 'middle',
+
+        },
     ];
 };
 
@@ -362,9 +378,79 @@
     queryData['driver'] = $("#driver").val();
     queryData['lineId'] = $("#lineId").val();
     queryData['state'] = $("#state").val();
+    queryData['promotionUser'] = $("#promotionUser").val();
+    queryData['abnormal'] = $("#abnormal").val();
+    queryData['promotion'] = $("#promotion").val();
+
     TOrderCrossCity.table.refresh({query: queryData});
 };
 
+
+
+TOrderCrossCity.exportExcel=function (){
+    let p = "";
+    let insertTime = $('#insertTime').val();
+    let orderNum = $('#orderNum').val();
+    let orderSource = $('#orderSource').val();
+    let userName = $('#userName').val();
+    let userPhone = $('#userPhone').val();
+    let passengers = $('#passengers').val();
+    let passengersPhone = $('#passengersPhone').val();
+    let serverCarModelId = $('#serverCarModelId').val();
+    let driver = $('#driver').val();
+    let lineId = $('#lineId').val();
+    let state = $('#state').val();
+    let promotionUser = $('#promotionUser').val();
+    let abnormal = $('#abnormal').val();
+    let promotion = $('#promotion').val();
+    if(null != insertTime && '' != insertTime){
+        p += "insertTime=" + insertTime + "&";
+    }
+    if(null != orderNum && '' != orderNum){
+        p += "orderNum=" + orderNum + "&";
+    }
+    if(null != orderSource && '' != orderSource){
+        p += "orderSource=" + orderSource + "&";
+    }
+    if(null != userName && '' != userName){
+        p += "userName=" + userName + "&" ;
+    }
+    if(null != userPhone && '' != userPhone){
+        p += "userPhone=" + userPhone + "&" ;
+    }
+    if(null != passengers && '' != passengers){
+        p += "passengers=" + passengers + "&" ;
+    }
+    if(null != passengersPhone && '' != passengersPhone){
+        p += "passengersPhone=" + passengersPhone + "&" ;
+    }
+    if(null != serverCarModelId && '' != serverCarModelId){
+        p += "serverCarModelId=" + serverCarModelId + "&" ;
+    }
+    if(null != driver && '' != driver){
+        p += "driver=" + driver + "&" ;
+    }
+    if(null != lineId && '' != lineId){
+        p += "lineId=" + lineId + "&" ;
+    }
+    if(null != state && '' != state){
+        p += "state=" + state + "&" ;
+    }
+    if(null != promotionUser && '' != promotionUser){
+        p += "promotionUser=" + promotionUser + "&" ;
+    }
+    if(null != abnormal && '' != abnormal){
+        p += "abnormal=" + abnormal + "&" ;
+    }
+    if(null != promotion && '' != promotion){
+        p += "promotion=" + promotion + "&" ;
+    }
+    if('' != p){
+        p = "?" + p.substring(0, p.length - 1);
+    }
+    console.log('p['+p+']')
+    window.location.href = Feng.ctxPath + '/tOrderCrossCity/export' + p;
+}
 TOrderCrossCity.resetSearch = function () {
     $("#insertTime").val("");
     $("#orderNum").val("");
@@ -377,6 +463,9 @@
     $("#driver").val("");
     $("#lineId").val("");
     $("#state").val("");
+    $("#promotionUser").val("");
+    $("#abnormal").val("");
+    $("#promotion").val("");
     TOrderCrossCity.search();
 };
 
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderPrivateCar/tOrderPrivateCar.js b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderPrivateCar/tOrderPrivateCar.js
index 29e168d..607fcbc 100644
--- a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderPrivateCar/tOrderPrivateCar.js
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderPrivateCar/tOrderPrivateCar.js
@@ -223,7 +223,23 @@
                 }
                 return btn;
             }
-        }
+        },
+        {title: '是否异常订单', field: 'abnormal', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                return {1:"否",2:"是"}[value];
+            }
+        },
+        {title: '是否推广订单', field: 'promotion', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                return {1:"否",2:"是"}[value];
+            }
+        },
+        {title: '推广员姓名', field: 'promotionUser', visible: true, align: 'center', valign: 'middle',
+
+        },
+        {title: '推广员电话', field: 'promotionPhone', visible: true, align: 'center', valign: 'middle',
+
+        },
     ];
 };
 
@@ -386,8 +402,79 @@
     queryData['driver'] = $("#driver").val();
     queryData['state'] = $("#state").val();
     queryData['rideType'] = $('#rideType').val();
+    queryData['promotionUser'] = $("#promotionUser").val();
+    queryData['abnormal'] = $("#abnormal").val();
+    queryData['promotion'] = $("#promotion").val();
     TOrderPrivateCar.table.refresh({query: queryData});
 };
+
+
+
+TOrderPrivateCar.exportExcel=function (){
+    let p = "";
+    let insertTime = $('#insertTime').val();
+    let orderNum = $('#orderNum').val();
+    let orderSource = $('#orderSource').val();
+    let userName = $('#userName').val();
+    let userPhone = $('#userPhone').val();
+    let passengers = $('#passengers').val();
+    let passengersPhone = $('#passengersPhone').val();
+    let serverCarModelId = $('#serverCarModelId').val();
+    let driver = $('#driver').val();
+    let rideType = $('#rideType').val();
+    let state = $('#state').val();
+    let promotionUser = $('#promotionUser').val();
+    let abnormal = $('#abnormal').val();
+    let promotion = $('#promotion').val();
+    if(null != insertTime && '' != insertTime){
+        p += "insertTime=" + insertTime + "&";
+    }
+    if(null != orderNum && '' != orderNum){
+        p += "orderNum=" + orderNum + "&";
+    }
+    if(null != orderSource && '' != orderSource){
+        p += "orderSource=" + orderSource + "&";
+    }
+    if(null != userName && '' != userName){
+        p += "userName=" + userName + "&" ;
+    }
+    if(null != userPhone && '' != userPhone){
+        p += "userPhone=" + userPhone + "&" ;
+    }
+    if(null != passengers && '' != passengers){
+        p += "passengers=" + passengers + "&" ;
+    }
+    if(null != passengersPhone && '' != passengersPhone){
+        p += "passengersPhone=" + passengersPhone + "&" ;
+    }
+    if(null != serverCarModelId && '' != serverCarModelId){
+        p += "serverCarModelId=" + serverCarModelId + "&" ;
+    }
+    if(null != driver && '' != driver){
+        p += "driver=" + driver + "&" ;
+    }
+    if(null != rideType && '' != rideType){
+        p += "rideType=" + rideType + "&" ;
+    }
+    if(null != state && '' != state){
+        p += "state=" + state + "&" ;
+    }
+    if(null != promotionUser && '' != promotionUser){
+        p += "promotionUser=" + promotionUser + "&" ;
+    }
+    if(null != abnormal && '' != abnormal){
+        p += "abnormal=" + abnormal + "&" ;
+    }
+    if(null != promotion && '' != promotion){
+        p += "promotion=" + promotion + "&" ;
+    }
+    if('' != p){
+        p = "?" + p.substring(0, p.length - 1);
+    }
+    console.log('p['+p+']')
+    window.location.href = Feng.ctxPath + '/tOrderPrivateCar/export' + p;
+}
+
 
 TOrderPrivateCar.resetSearch = function () {
     $("#insertTime").val("");
@@ -401,6 +488,9 @@
     $("#driver").val("");
     $("#state").val("");
     $('#rideType').val('');
+    $("#promotionUser").val("");
+    $("#abnormal").val("");
+    $("#promotion").val("");
     TOrderPrivateCar.search();
 };
 
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderTaxi/tOrderTaxi.js b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderTaxi/tOrderTaxi.js
index 67f39e0..143a0d8 100644
--- a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderTaxi/tOrderTaxi.js
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tOrderTaxi/tOrderTaxi.js
@@ -210,7 +210,23 @@
                 }
                 return btn;
             }
-        }
+        },
+        {title: '是否异常订单', field: 'abnormal', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                return {1:"否",2:"是"}[value];
+            }
+        },
+        {title: '是否推广订单', field: 'promotion', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                return {1:"否",2:"是"}[value];
+            }
+        },
+        {title: '推广员姓名', field: 'promotionUser', visible: true, align: 'center', valign: 'middle',
+
+        },
+        {title: '推广员电话', field: 'promotionPhone', visible: true, align: 'center', valign: 'middle',
+
+        },
     ];
 };
 
@@ -390,8 +406,72 @@
     queryData['passengersPhone'] = $("#passengersPhone").val();
     queryData['driver'] = $("#driver").val();
     queryData['state'] = $("#state").val();
+    queryData['promotionUser'] = $("#promotionUser").val();
+    queryData['abnormal'] = $("#abnormal").val();
+    queryData['promotion'] = $("#promotion").val();
     TOrderTaxi.table.refresh({query: queryData});
 };
+
+
+
+TOrderTaxi.exportExcel=function (){
+    let p = "";
+    let insertTime = $('#insertTime').val();
+    let orderNum = $('#orderNum').val();
+    let orderSource = $('#orderSource').val();
+    let userName = $('#userName').val();
+    let userPhone = $('#userPhone').val();
+    let passengers = $('#passengers').val();
+    let passengersPhone = $('#passengersPhone').val();
+    let driver = $('#driver').val();
+    let state = $('#state').val();
+    let promotionUser = $('#promotionUser').val();
+    let abnormal = $('#abnormal').val();
+    let promotion = $('#promotion').val();
+    if(null != insertTime && '' != insertTime){
+        p += "insertTime=" + insertTime + "&";
+    }
+    if(null != orderNum && '' != orderNum){
+        p += "orderNum=" + orderNum + "&";
+    }
+    if(null != orderSource && '' != orderSource){
+        p += "orderSource=" + orderSource + "&";
+    }
+    if(null != userName && '' != userName){
+        p += "userName=" + userName + "&" ;
+    }
+    if(null != userPhone && '' != userPhone){
+        p += "userPhone=" + userPhone + "&" ;
+    }
+    if(null != passengers && '' != passengers){
+        p += "passengers=" + passengers + "&" ;
+    }
+    if(null != passengersPhone && '' != passengersPhone){
+        p += "passengersPhone=" + passengersPhone + "&" ;
+    }
+    if(null != driver && '' != driver){
+        p += "driver=" + driver + "&" ;
+    }
+    if(null != state && '' != state){
+        p += "state=" + state + "&" ;
+    }
+    if(null != promotionUser && '' != promotionUser){
+        p += "promotionUser=" + promotionUser + "&" ;
+    }
+    if(null != abnormal && '' != abnormal){
+        p += "abnormal=" + abnormal + "&" ;
+    }
+    if(null != promotion && '' != promotion){
+        p += "promotion=" + promotion + "&" ;
+    }
+    if('' != p){
+        p = "?" + p.substring(0, p.length - 1);
+    }
+    console.log('p['+p+']')
+    window.location.href = Feng.ctxPath + '/tOrderTaxi/export' + p;
+}
+
+
 
 TOrderTaxi.resetSearch = function () {
     $("#insertTime").val("");
@@ -403,6 +483,9 @@
     $("#passengersPhone").val("");
     $("#driver").val("");
     $("#state").val("");
+    $("#promotionUser").val("");
+    $("#abnormal").val("");
+    $("#promotion").val("");
     TOrderTaxi.search();
 };
 
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/trPrivateOrdeCar/tOrderPrivateCar.js b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/trPrivateOrdeCar/tOrderPrivateCar.js
new file mode 100644
index 0000000..4c748ce
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/trPrivateOrdeCar/tOrderPrivateCar.js
@@ -0,0 +1,434 @@
+/**
+ * 快车订单管理初始化
+ */
+var TOrderPrivateCar = {
+    id: "TOrderPrivateCarTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1
+};
+
+/**
+ * 初始化表格的列
+ */
+TOrderPrivateCar.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: 'rideType', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.rideType != '' && row.rideType != null) {
+                    if (row.rideType == 1){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="独享订单" onfocus="TUser.tooltip()">独享订单</p>']
+                    } else if (row.rideType == 2){
+                        btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="一口价订单" onfocus="TUser.tooltip()">一口价订单</p>']
+                    } else if (row.rideType == 3){
+                        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: 'serverCarModelName', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                var btn = "";
+                if(row.serverCarModelName != '' && row.serverCarModelName != null) {
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.serverCarModelName + '" onfocus="TUser.tooltip()">' + row.serverCarModelName + '</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;
+            }
+        },
+        {title: '是否异常订单', field: 'abnormal', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                return {1:"否",2:"是"}[value];
+            }
+        },
+        {title: '是否推广订单', field: 'promotion', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                return {1:"否",2:"是"}[value];
+            }
+        },
+        {title: '推广员姓名', field: 'promotionUser', visible: true, align: 'center', valign: 'middle',
+
+        },
+        {title: '推广员电话', field: 'promotionPhone', visible: true, align: 'center', valign: 'middle',
+
+        },
+    ];
+};
+
+/**
+ * 检查是否选中
+ */
+TOrderPrivateCar.check = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length == 0){
+        Feng.info("请先选中表格中的某一记录!");
+        return false;
+    }else{
+        TOrderPrivateCar.seItem = selected[0];
+        return true;
+    }
+};
+
+/**
+ * 添加快车订单
+ */
+TOrderPrivateCar.addOrder =function(){
+    var index = layer.open({
+        type: 2,
+        title: '添加快车订单',
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/tOrderPrivateCar/tOrderPrivateCar_addOrder'
+    });
+    this.layerIndex = index;
+
+};
+
+/**
+ * 打开查看快车订单详情
+ */
+TOrderPrivateCar.orderDetail = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title: '快车订单详情',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tOrderPrivateCar/tOrderPrivateCar_orderDetail/' + TOrderPrivateCar.seItem.id
+        });
+        this.layerIndex = index;
+    }
+};
+
+/**
+ * 取消订单
+ */
+TOrderPrivateCar.cancelOrder = function(){
+    if (this.check()) {
+        var nickname = TOrderPrivateCar.seItem.orderNum;
+        if (nickname == "" || nickname == null || nickname == undefined) {
+            nickname = "该订单";
+        } else {
+            nickname = "【" + nickname + "】";
+        }
+        if (TOrderPrivateCar.seItem.state == 7 || TOrderPrivateCar.seItem.state == 8 || TOrderPrivateCar.seItem.state == 9 || TOrderPrivateCar.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 + "/tOrderPrivateCar/cancel", function (data) {
+                layer.msg("加载中...",{
+                    icon:16,
+                    time:-1
+                });
+                swal("取消订单成功", "您已经成功取消了" + nickname + "。", "success");
+                TOrderPrivateCar.table.refresh();
+                layer.closeAll()
+            }, function (data) {
+                swal("取消订单失败", data.responseJSON.message + "!", "warning");
+                layer.closeAll()
+            });
+            ajax.set("tOrderPrivateCarId", TOrderPrivateCar.seItem.id);
+            ajax.start();
+        });
+    }
+}
+
+/**
+ * 订单轨迹
+ */
+TOrderPrivateCar.trajectory = function(){
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title: '快车订单轨迹',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tOrderPrivateCar/tOrderPrivateCar_trajectory/' + TOrderPrivateCar.seItem.id
+        });
+        this.layerIndex = index;
+    }
+}
+
+
+/**
+ * 删除快车订单
+ */
+TOrderPrivateCar.deleteOrder = function () {
+    if (this.check()) {
+        var orderNum = TOrderPrivateCar.seItem.orderNum;
+        if (orderNum == "" || orderNum == null || orderNum == undefined) {
+            orderNum = "该订单";
+        } else {
+            orderNum = "【" + orderNum + "】";
+        }
+        if (TOrderPrivateCar.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 + "/tOrderPrivateCar/delete", function (data) {
+                swal("删除成功", "您已经删除了" + orderNum + "。", "success");
+                TOrderPrivateCar.table.refresh();
+            }, function (data) {
+                swal("删除失败", data.responseJSON.message + "!", "warning");
+            });
+            ajax.set("tOrderPrivateCarId", TOrderPrivateCar.seItem.id);
+            ajax.start();
+        });
+    }
+};
+
+/**
+ * 查询快车订单列表
+ */
+TOrderPrivateCar.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();
+    queryData['rideType'] = $('#rideType').val();
+    queryData['promotionUser'] = $("#promotionUser").val();
+    queryData['abnormal'] = $("#abnormal").val();
+    queryData['promotion'] = $("#promotion").val();
+    TOrderPrivateCar.table.refresh({query: queryData});
+};
+
+TOrderPrivateCar.resetSearch = function () {
+    $("#insertTime").val("");
+    $("#orderNum").val("");
+    $("#orderSource").val("");
+    $("#userName").val("");
+    $("#userPhone").val("");
+    $("#passengers").val("");
+    $("#passengersPhone").val("");
+    $("#serverCarModelId").val("");
+    $("#driver").val("");
+    $("#state").val("");
+    $('#rideType').val('');
+    $("#promotionUser").val("");
+    $("#abnormal").val("");
+    $("#promotion").val("");
+    TOrderPrivateCar.search();
+};
+
+$(function () {
+    var defaultColunms = TOrderPrivateCar.initColumn();
+    var table = new BSTable(TOrderPrivateCar.id, "/tOrderPrivateCar/list", defaultColunms);
+    table.setPaginationType("server");
+    TOrderPrivateCar.table = table.init();
+});
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/trPrivateOrdeCar/tOrderPrivateCar_info.js b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/trPrivateOrdeCar/tOrderPrivateCar_info.js
new file mode 100644
index 0000000..b26ba58
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/trPrivateOrdeCar/tOrderPrivateCar_info.js
@@ -0,0 +1,287 @@
+/**
+ * 初始化快车订单详情对话框
+ */
+var TOrderPrivateCarInfoDlg = {
+    tOrderPrivateCarInfoData: {}
+};
+
+/**
+ * 清除数据
+ */
+TOrderPrivateCarInfoDlg.clearData = function () {
+    this.tOrderPrivateCarInfoData = {};
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TOrderPrivateCarInfoDlg.set = function (key, val) {
+    this.tOrderPrivateCarInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val;
+    return this;
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TOrderPrivateCarInfoDlg.get = function (key) {
+    return $("#" + key).val();
+}
+
+/**
+ * 关闭此对话框
+ */
+TOrderPrivateCarInfoDlg.close = function () {
+    parent.layer.close(window.parent.TOrderPrivateCar.layerIndex);
+}
+
+/**
+ * 收集数据
+ */
+TOrderPrivateCarInfoDlg.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');
+}
+
+/**
+ * 提交添加
+ */
+TOrderPrivateCarInfoDlg.addSubmit = function () {
+
+    this.clearData();
+    this.collectData();
+
+    if ($("#startAddress").val() === ""){
+        Feng.error("请输入起点");
+        return false;
+    }
+    if ($("#endAddress").val() === ""){
+        Feng.error("请输入终点");
+        return false;
+    }
+    if ($("#travelTime").val() === ""){
+        Feng.error("请选择用车时间");
+        return false;
+    }
+    if ($("#passengers").val() === ""){
+        Feng.error("请输入乘车人姓名");
+        return false;
+    }
+    if ($("#passengersPhone").val() === ""){
+        Feng.error("请输入乘车人手机号");
+        return false;
+    }
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tOrderPrivateCar/add", function (data) {
+        Feng.success("添加成功!");
+        window.parent.TOrderPrivateCar.table.refresh();
+        TOrderPrivateCarInfoDlg.close();
+    }, function (data) {
+        Feng.error("添加失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set(this.tOrderPrivateCarInfoData);
+    ajax.start();
+}
+
+/**
+ * 提交修改
+ */
+TOrderPrivateCarInfoDlg.editSubmit = function () {
+
+    this.clearData();
+    this.collectData();
+
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tOrderPrivateCar/update", function (data) {
+        Feng.success("修改成功!");
+        window.parent.TOrderPrivateCar.table.refresh();
+        TOrderPrivateCarInfoDlg.close();
+    }, function (data) {
+        Feng.error("修改失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set(this.tOrderPrivateCarInfoData);
+    ajax.start();
+}
+
+var map = new AMap.Map("container", {
+    resizeEnable: true,
+    zoom: 14
+});
+$(function () {
+    var type = $("#type").val();
+    if (type != 2) {
+        getTrajectory();
+    }
+});
+
+function getTrajectory() {
+    $.ajax({
+        url: Feng.ctxPath + '/tOrderPrivateCar/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();
+}
+
+/**
+ * 选择起点
+ */
+TOrderPrivateCarInfoDlg.startAddress = function () {
+    $("#startAddressModel").show();
+};
+
+
+/**
+ * 选择终点
+ */
+TOrderPrivateCarInfoDlg.endAddress = function () {
+    $("#endAddressModel").show();
+};

--
Gitblit v1.7.1