liujie
2025-07-21 60eb2f18aaf48a15d2af07918ceadff9cb650626
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/taxi/TOrderTaxiController.java
@@ -1,6 +1,5 @@
package com.stylefeng.guns.modular.system.controller.taxi;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.stylefeng.guns.core.base.controller.BaseController;
@@ -15,20 +14,23 @@
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;
import org.apache.commons.collections.CollectionUtils;
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 java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
/**
@@ -40,27 +42,30 @@
@Controller
@RequestMapping("/tOrderTaxi")
public class TOrderTaxiController extends BaseController {
    private String PREFIX = "/system/tOrderTaxi/";
    @Autowired
    private ITOrderTaxiService tOrderTaxiService;
    @Autowired
    private ITOrderPrivateCarService tOrderPrivateCarService;
    @Autowired
    private ITOrderPositionService tOrderPositionService;
    @Autowired
    private ITDriverService tDriverService;
    @Autowired
    private ITUserService userService;
    @Value("${filePath}")
    private String filePath;
    @Resource
    private MongoTemplate mongoTemplate;
    @Autowired
    private ShiroExtUtil shiroExtUtil;
    /**
     * 跳转到出租车订单首页
     */
@@ -68,7 +73,7 @@
    public String index() {
        return PREFIX + "tOrderTaxi.html";
    }
    /**
     * 跳转到添加出租车订单
     */
@@ -76,7 +81,7 @@
    public String tOrderTaxiAdd() {
        return PREFIX + "tOrderTaxi_add.html";
    }
    /**
     * 跳转到修改出租车订单
     */
@@ -139,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)) {
@@ -148,9 +156,268 @@
            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();
        }
    }
    /**
     * 选择司机列表
@@ -167,7 +434,7 @@
    }
    private ResultUtil resultUtil;
    /**
     * 获取订单轨迹
     *
@@ -176,28 +443,14 @@
     */
    @ResponseBody
    @RequestMapping(value = "/getOrderTrack", method = RequestMethod.POST)
    public ResultUtil getOrderTrack(String orderDetailId) {
    public ResultUtil getOrderTrack(Integer orderDetailId) {
        if (ToolUtil.isNotEmpty(orderDetailId)) {
            try {
//                List<TOrderPosition> list = tOrderPositionService.selectList(new EntityWrapper<TOrderPosition>().eq("orderType", 2).eq("orderId", orderDetailId).orderBy("insertTime"));
                /*if(list.size() == 0){
                    return ResultUtil.error("该订单没有运行轨迹");
                }*/
                //将数据存储到文件中
                File file = new File(filePath + orderDetailId + "_2.txt");
                if (!file.exists()) {
                    return ResultUtil.success(new ArrayList<>());
                }
                //读取文件(字符流)
                BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
                //循环取出数据
                String str = null;
                StringBuffer sb = new StringBuffer();
                while ((str = in.readLine()) != null) {
                    sb.append(str);
                }
                List<TOrderPosition> list = JSONArray.parseArray(sb.toString(), TOrderPosition.class);
                resultUtil = ResultUtil.success(list);
                Query query = new Query()
                        .addCriteria(Criteria.where("orderId").is(orderDetailId).and("orderType").is(2))
                        .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();
@@ -288,6 +541,12 @@
    @RequestMapping(value = "/add")
    @ResponseBody
    public Object add(TOrderTaxi tOrderTaxi) {
        if (ToolUtil.isEmpty(tOrderTaxi.getStartLat()) || ToolUtil.isEmpty(tOrderTaxi.getStartLon())) {
            return "请选择有效的上车地点";
        }
        if (ToolUtil.isEmpty(tOrderTaxi.getEndLat()) || ToolUtil.isEmpty(tOrderTaxi.getEndLon())) {
            return "请选择有效的下车地点";
        }
        TUser user = userService.selectOne(new EntityWrapper<TUser>().eq("phone", tOrderTaxi.getPassengersPhone()));
        if (ToolUtil.isNotEmpty(user)) {///  用户是平台用户
            tOrderTaxi.setOrderNum("TAXI" + String.valueOf(1000000 + tOrderTaxiService.selectList(null).size() + 1).substring(1));
@@ -321,7 +580,7 @@
            tUser.setInsertTime(DateUtil.parseTime(DateUtil.getTime()));
            tUser.setPhone(tOrderTaxi.getPassengersPhone());
            tUser.setName(tOrderTaxi.getPassengers());
            tUser.setNickName("QYT" + String.valueOf(1000000 + userService.selectList(null).size() + 1).substring(1));
            tUser.setNickName("GRJY" + String.valueOf(1000000 + userService.selectList(null).size() + 1).substring(1));
            userService.insert(tUser);
            ///  存入订单信息