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; }