“mitao”
2026-01-13 4c954a5fef11f477d814e74978eac9cd23d982c4
feat(driver):班次详情接口
1个文件已添加
5个文件已修改
244 ■■■■■ 已修改文件
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/controller/CrossCityShiftController.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/LineShiftDriverMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/mapping/LineShiftDriverMapper.xml 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/ILineShiftDriverService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineShiftDriverServiceImpl.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/warpper/ScanOrderDetailWarpper.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/controller/CrossCityShiftController.java
@@ -4,6 +4,7 @@
import cn.hutool.core.date.DateUtil;
import com.stylefeng.guns.modular.crossCity.server.ILineShiftDriverService;
import com.stylefeng.guns.modular.crossCity.warpper.DriverShiftListWarpper;
import com.stylefeng.guns.modular.crossCity.warpper.ScanOrderDetailWarpper;
import com.stylefeng.guns.modular.system.service.IDriverService;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.util.SystemException;
@@ -12,10 +13,7 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
@@ -89,4 +87,22 @@
        }
        return ResultUtil.success();
    }
    /**
     * 【202601】获取班次详情
     * @param lineShiftDriverId 司机排班记录ID
     * @return 扫码下单详情
     */
    @ResponseBody
    @RequestMapping(value = "/getDetail", method = RequestMethod.GET)
    @ApiOperation(value = "【202601】获取扫码下单详情", tags = {"用户端-跨城"}, notes = "根据扫码内容获取下单页面详情数据,包含司机信息、线路信息、站点信息等")
    @ApiImplicitParam(value = "司机排班记录ID", name = "lineShiftDriverId", required = true, dataType = "int")
    public ResultUtil<ScanOrderDetailWarpper> getDetail(Integer lineShiftDriverId) {
        try {
            return lineShiftDriverService.getDetail(lineShiftDriverId);
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/LineShiftDriverMapper.java
@@ -27,4 +27,11 @@
     * @return
     */
    List<Map<String, Object>> queryDriverShiftByDate(@Param("driverId") Integer driverId, @Param("date") String date);
    /**
     * 【202601】班次详情数据
     * @param lineShiftDriverId 司机排班记录ID
     * @return 班次详情数据
     */
    Map<String, Object> getDetail(Integer lineShiftDriverId);
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/mapping/LineShiftDriverMapper.xml
@@ -58,4 +58,52 @@
          AND l.state = 1
        ORDER BY l.id, ls.startTime
    </select>
    <select id="getDetail" resultType="java.util.Map">
        SELECT
            -- 司机信息
            d.headImgUrl as headImgUrl,
            CONCAT(LEFT(d.name, 1), '师傅') as driverName,
            c.carLicensePlate as carLicensePlate,
            CONCAT(cb.name, cm.name) as carBrand,
            c.carColor as carColor,
            (SELECT IFNULL(ROUND(AVG(fraction), 2), 0) FROM t_order_evaluate WHERE driverId = lsd.driverId) as score,
            (SELECT COUNT(*) FROM t_order_cross_city WHERE driverId = lsd.driverId AND state = 9) as orderCount,
            -- 线路信息
            l.id as lineId,
            l.name as lineName,
            lp.content as priceContent,
            DATE_FORMAT(lsd.day, '%Y-%m-%d') as day,
            ls.startTime as startTime,
            ls.endTime as endTime,
            lsd.totalSeat as totalSeat,
            lsd.laveSeat as laveSeat,
            lsd.laveSeatNumber as laveSeatNumber,
            -- 站点信息
            (SELECT siteId FROM t_line_site WHERE lineId = l.id AND type = 1 LIMIT 1) as startSiteId,
            (SELECT s.name FROM t_site s JOIN t_line_site tls ON s.id = tls.siteId WHERE tls.lineId = l.id AND tls.type = 1 LIMIT 1) as startSiteName,
            (SELECT siteId FROM t_line_site WHERE lineId = l.id AND type = 2 LIMIT 1) as endSiteId,
            (SELECT s.name FROM t_site s JOIN t_line_site tls ON s.id = tls.siteId WHERE tls.lineId = l.id AND tls.type = 2 LIMIT 1) as endSiteName,
            -- 默认点信息(从起点站点获取)
            (SELECT s.defaultPointAddress FROM t_site s JOIN t_line_site tls ON s.id = tls.siteId WHERE tls.lineId = l.id AND tls.type = 2 LIMIT 1) as defaultPointAddress,
            (SELECT s.defaultPointLon FROM t_site s JOIN t_line_site tls ON s.id = tls.siteId WHERE tls.lineId = l.id AND tls.type = 2 LIMIT 1) as defaultPointLon,
            (SELECT s.defaultPointLat FROM t_site s JOIN t_line_site tls ON s.id = tls.siteId WHERE tls.lineId = l.id AND tls.type = 2 LIMIT 1) as defaultPointLat,
            -- 其他信息
            cs.serverCarModelId as serverCarModelId,
            lsd.driverId as driverId,
            lsd.id as lineShiftDriverId
        FROM t_line_shift_driver lsd
            LEFT JOIN t_line_shift ls ON lsd.lineShiftId = ls.id
            LEFT JOIN t_line l ON ls.lineId = l.id
            LEFT JOIN t_driver d ON lsd.driverId = d.id
            LEFT JOIN t_car c ON d.carId = c.id
            LEFT JOIN t_car_brand cb ON c.carBrandId = cb.id
            LEFT JOIN t_car_model cm ON c.carModelId = cm.id
            LEFT JOIN t_car_service cs ON c.id = cs.carId AND cs.type = 3
            LEFT JOIN t_line_price lp ON l.id = lp.lineId AND cs.serverCarModelId = lp.serverCarModelId AND lp.state = 1
        WHERE lsd.id = #{lineShiftDriverId}
    </select>
</mapper>
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/ILineShiftDriverService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.crossCity.model.LineShiftDriver;
import com.stylefeng.guns.modular.crossCity.warpper.DriverShiftListWarpper;
import com.stylefeng.guns.modular.crossCity.warpper.ScanOrderDetailWarpper;
import com.stylefeng.guns.modular.system.util.ResultUtil;
public interface ILineShiftDriverService extends IService<LineShiftDriver> {
@@ -26,4 +27,11 @@
     * @throws Exception
     */
    DriverShiftListWarpper queryDriverShiftList(Integer driverId, String date) throws Exception;
    /**
     * 【202601】查询班次详情
     * @param lineShiftDriverId 班次id
     * @return
     * @throws Exception
     */
    ResultUtil<ScanOrderDetailWarpper> getDetail(Integer lineShiftDriverId);
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineShiftDriverServiceImpl.java
@@ -19,6 +19,7 @@
import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService;
import com.stylefeng.guns.modular.crossCity.warpper.DriverShiftListWarpper;
import com.stylefeng.guns.modular.crossCity.warpper.LineShiftItemWarpper;
import com.stylefeng.guns.modular.crossCity.warpper.ScanOrderDetailWarpper;
import com.stylefeng.guns.modular.system.dao.CarModelMapper;
import com.stylefeng.guns.modular.system.dao.CarServiceMapper;
import com.stylefeng.guns.modular.system.dao.ServerCarModelMapper;
@@ -347,4 +348,61 @@
        result.setLineList(lineList);
        return result;
    }
    @Override
    public ResultUtil<ScanOrderDetailWarpper> getDetail(Integer lineShiftDriverId) {
        // 1. 查询基础数据
        Map<String, Object> data = lineShiftDriverMapper.getDetail(lineShiftDriverId);
        if (data == null || data.isEmpty()) {
            return ResultUtil.error("班次信息不存在");
        }
        // 2. 构建返回对象
        ScanOrderDetailWarpper result = new ScanOrderDetailWarpper();
        // 司机信息
        result.setHeadImgUrl(data.get("headImgUrl") != null ? data.get("headImgUrl").toString() : null);
        result.setDriverName(data.get("driverName") != null ? data.get("driverName").toString() : null);
        result.setCarLicensePlate(data.get("carLicensePlate") != null ? data.get("carLicensePlate").toString() : null);
        result.setCarBrand(data.get("carBrand") != null ? data.get("carBrand").toString() : null);
        result.setCarColor(data.get("carColor") != null ? data.get("carColor").toString() : null);
        result.setScore(data.get("score") != null ? Double.parseDouble(data.get("score").toString()) : 0.0);
        result.setOrderCount(data.get("orderCount") != null ? Integer.parseInt(data.get("orderCount").toString()) : 0);
        // 线路信息
        result.setLineId(data.get("lineId") != null ? Integer.parseInt(data.get("lineId").toString()) : null);
        result.setLineName(data.get("lineName") != null ? data.get("lineName").toString() : null);
        result.setDay(data.get("day") != null ? data.get("day").toString() : null);
        result.setStartTime(data.get("startTime") != null ? data.get("startTime").toString() : null);
        result.setEndTime(data.get("endTime") != null ? data.get("endTime").toString() : null);
        result.setTotalSeat(data.get("totalSeat") != null ? Integer.parseInt(data.get("totalSeat").toString()) : null);
        result.setLaveSeat(data.get("laveSeat") != null ? Integer.parseInt(data.get("laveSeat").toString()) : null);
        result.setLaveSeatNumber(data.get("laveSeatNumber") != null ? data.get("laveSeatNumber").toString() : null);
        // 3. 解析价格JSON获取单人价格
        String priceContent = data.get("priceContent") != null ? data.get("priceContent").toString() : null;
        if (priceContent != null && !priceContent.isEmpty()) {
            JSONObject json = JSON.parseObject(priceContent);
            String num1 = json.getString("num1");
            if (num1 != null && !num1.isEmpty()) {
                result.setUnitPrice(Double.parseDouble(num1));
            }
        }
        // 站点信息
        result.setStartSiteId(data.get("startSiteId") != null ? Integer.parseInt(data.get("startSiteId").toString()) : null);
        result.setStartSiteName(data.get("startSiteName") != null ? data.get("startSiteName").toString() : null);
        result.setEndSiteId(data.get("endSiteId") != null ? Integer.parseInt(data.get("endSiteId").toString()) : null);
        result.setEndSiteName(data.get("endSiteName") != null ? data.get("endSiteName").toString() : null);
        // 默认点信息
        result.setDefaultPointAddress(data.get("defaultPointAddress") != null ? data.get("defaultPointAddress").toString() : null);
        result.setDefaultPointLon(data.get("defaultPointLon") != null ? Double.parseDouble(data.get("defaultPointLon").toString()) : null);
        result.setDefaultPointLat(data.get("defaultPointLat") != null ? Double.parseDouble(data.get("defaultPointLat").toString()) : null);
        // 其他信息
        result.setServerCarModelId(data.get("serverCarModelId") != null ? Integer.parseInt(data.get("serverCarModelId").toString()) : null);
        result.setDriverId(data.get("driverId") != null ? Integer.parseInt(data.get("driverId").toString()) : null);
        result.setLineShiftDriverId(lineShiftDriverId);
        return ResultUtil.success(result);
    }
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/warpper/ScanOrderDetailWarpper.java
New file
@@ -0,0 +1,99 @@
package com.stylefeng.guns.modular.crossCity.warpper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * 【202601】扫码下单详情包装类
 */
@Data
@ApiModel("扫码下单详情")
public class ScanOrderDetailWarpper {
    // ========== 司机信息 ==========
    @ApiModelProperty("司机头像")
    private String headImgUrl;
    @ApiModelProperty("司机名称(黄师傅格式)")
    private String driverName;
    @ApiModelProperty("车牌号")
    private String carLicensePlate;
    @ApiModelProperty("车辆类型(品牌+型号)")
    private String carBrand;
    @ApiModelProperty("车辆颜色")
    private String carColor;
    @ApiModelProperty("星级评分")
    private Double score;
    @ApiModelProperty("跨城订单单数")
    private Integer orderCount;
    // ========== 线路信息 ==========
    @ApiModelProperty("线路ID")
    private Integer lineId;
    @ApiModelProperty("线路名称")
    private String lineName;
    @ApiModelProperty("线路单价(单人价格)")
    private Double unitPrice;
    @ApiModelProperty("班次日期")
    private String day;
    @ApiModelProperty("班次开始时间")
    private String startTime;
    @ApiModelProperty("班次结束时间")
    private String endTime;
    @ApiModelProperty("总座位")
    private Integer totalSeat;
    @ApiModelProperty("剩余座位")
    private Integer laveSeat;
    @ApiModelProperty("剩余座位号(逗号分隔)")
    private String laveSeatNumber;
    // ========== 站点信息 ==========
    @ApiModelProperty("默认上车站点ID")
    private Integer startSiteId;
    @ApiModelProperty("默认上车站点名称")
    private String startSiteName;
    @ApiModelProperty("默认下车站点ID")
    private Integer endSiteId;
    @ApiModelProperty("默认下车站点名称")
    private String endSiteName;
    // ========== 其他信息 ==========
    @ApiModelProperty("其他费用")
    private Double otherFee;
    @ApiModelProperty("服务车型ID")
    private Integer serverCarModelId;
    @ApiModelProperty("司机ID")
    private Integer driverId;
    @ApiModelProperty("司机排班记录ID")
    private Integer lineShiftDriverId;
    @ApiModelProperty("默认点位置")
    private String defaultPointAddress;
    @ApiModelProperty("默认点经度")
    private Double defaultPointLon;
    @ApiModelProperty("默认点纬度")
    private Double defaultPointLat;
}