“mitao”
2026-01-08 8dde4688992ddb61aa19593ace8cc79d41d7b83f
feat:司机端,查询司机跨城排班列表
3个文件已添加
4个文件已修改
418 ■■■■■ 已修改文件
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/controller/CrossCityShiftController.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/LineShiftDriverMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/mapping/LineShiftDriverMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/ILineShiftDriverService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineShiftDriverServiceImpl.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/warpper/DriverShiftListWarpper.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/warpper/LineShiftItemWarpper.java 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/controller/CrossCityShiftController.java
New file
@@ -0,0 +1,59 @@
package com.stylefeng.guns.modular.crossCity.controller;
import com.stylefeng.guns.modular.crossCity.server.ILineShiftDriverService;
import com.stylefeng.guns.modular.crossCity.warpper.DriverShiftListWarpper;
import com.stylefeng.guns.modular.system.service.IDriverService;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
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 javax.servlet.http.HttpServletRequest;
/**
 * 【202601】城际专线排班控制器
 */
@Api
@RestController
@RequestMapping("/api/crossCity")
public class CrossCityShiftController {
    @Autowired
    private ILineShiftDriverService lineShiftDriverService;
    @Autowired
    private IDriverService driverService;
    /**
     * 【202601】获取司机城际专线排班列表
     * @param date 日期(yyyy-MM-dd),默认当天
     * @param request
     * @return
     */
    @ResponseBody
    @PostMapping("/queryDriverShiftList")
    @ApiOperation(value = "【202601】获取司机城际专线排班列表", tags = {"司机端-首页"}, notes = "获取司机在指定日期的城际专线排班信息,支持7天日期选择")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "日期(yyyy-MM-dd),默认当天", name = "date", required = false, dataType = "String"),
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResultUtil<DriverShiftListWarpper> queryDriverShiftList(String date, HttpServletRequest request) {
        try {
            Integer driverId = driverService.getUserIdFormRedis(request);
            if (null == driverId) {
                return ResultUtil.tokenErr();
            }
            DriverShiftListWarpper result = lineShiftDriverService.queryDriverShiftList(driverId, date);
            return ResultUtil.success(result);
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/LineShiftDriverMapper.java
@@ -6,6 +6,7 @@
import java.util.Date;
import java.util.List;
import java.util.Map;
public interface LineShiftDriverMapper extends BaseMapper<LineShiftDriver> {
@@ -18,4 +19,12 @@
     */
    List<LineShiftDriver> queryByDriver(@Param("lineShiftId") Integer lineShiftId, @Param("driverId") Integer driverId,
                       @Param("time") Date time);
    /**
     * 【202601】查询司机在指定日期的排班信息
     * @param driverId 司机id
     * @param date 日期(yyyy-MM-dd)
     * @return
     */
    List<Map<String, Object>> queryDriverShiftByDate(@Param("driverId") Integer driverId, @Param("date") String date);
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/mapping/LineShiftDriverMapper.xml
@@ -37,4 +37,25 @@
        </if>
        order by `day`
    </select>
    <!-- 【202601】查询司机在指定日期的排班信息 -->
    <select id="queryDriverShiftByDate" resultType="java.util.Map">
        SELECT
            lsd.id as lineShiftDriverId,
            lsd.lineShiftId as lineShiftId,
            lsd.laveSeat as laveSeat,
            lsd.totalSeat as totalSeat,
            ls.startTime as startTime,
            ls.endTime as endTime,
            l.id as lineId,
            l.name as lineName
        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
        WHERE lsd.driverId = #{driverId}
          AND DATE_FORMAT(lsd.`day`, '%Y-%m-%d') = #{date}
          AND ls.state = 1
          AND l.state = 1
        ORDER BY l.id, ls.startTime
    </select>
</mapper>
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/ILineShiftDriverService.java
@@ -2,6 +2,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.system.util.ResultUtil;
public interface ILineShiftDriverService extends IService<LineShiftDriver> {
@@ -16,4 +17,13 @@
     * @throws Exception
     */
    ResultUtil reservation(Integer type, Integer lineShiftId, String time, Integer driverId) throws Exception;
    /**
     * 【202601】查询司机排班列表
     * @param driverId 司机id
     * @param date 日期(yyyy-MM-dd),为空则默认当天
     * @return
     * @throws Exception
     */
    DriverShiftListWarpper queryDriverShiftList(Integer driverId, String date) throws Exception;
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineShiftDriverServiceImpl.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.crossCity.dao.LinePriceMapper;
import com.stylefeng.guns.modular.crossCity.dao.LineShiftDriverMapper;
import com.stylefeng.guns.modular.crossCity.dao.LineShiftMapper;
@@ -12,6 +13,8 @@
import com.stylefeng.guns.modular.crossCity.server.ILineShiftDriverService;
import com.stylefeng.guns.modular.crossCity.server.ILineSiteService;
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.system.dao.CarModelMapper;
import com.stylefeng.guns.modular.system.dao.CarServiceMapper;
import com.stylefeng.guns.modular.system.dao.ServerCarModelMapper;
@@ -27,6 +30,7 @@
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@Service
@@ -220,4 +224,97 @@
        }
        return false;
    }
    /**
     * 【202601】查询司机排班列表
     * @param driverId 司机id
     * @param date 日期(yyyy-MM-dd),为空则默认当天
     * @return
     * @throws Exception
     */
    @Override
    public DriverShiftListWarpper queryDriverShiftList(Integer driverId, String date) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        // 如果日期为空,默认当天
        if (ToolUtil.isEmpty(date)) {
            date = sdf.format(new Date());
        }
        DriverShiftListWarpper result = new DriverShiftListWarpper();
        // 查询司机在指定日期的排班信息
        List<Map<String, Object>> shiftList = lineShiftDriverMapper.queryDriverShiftByDate(driverId, date);
        // 按线路分组
        Map<Integer, List<Map<String, Object>>> lineGroupMap = new LinkedHashMap<>();
        Map<Integer, String> lineNameMap = new HashMap<>();
        for (Map<String, Object> shift : shiftList) {
            Integer lineId = Integer.valueOf(shift.get("lineId").toString());
            String lineName = shift.get("lineName").toString();
            lineNameMap.put(lineId, lineName);
            if (!lineGroupMap.containsKey(lineId)) {
                lineGroupMap.put(lineId, new ArrayList<>());
            }
            lineGroupMap.get(lineId).add(shift);
        }
        // 构建线路列表
        List<DriverShiftListWarpper.LineItemWarpper> lineList = new ArrayList<>();
        Date now = new Date();
        SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
        String currentTime = timeFormat.format(now);
        String today = sdf.format(now);
        for (Map.Entry<Integer, List<Map<String, Object>>> entry : lineGroupMap.entrySet()) {
            DriverShiftListWarpper.LineItemWarpper lineItem = new DriverShiftListWarpper.LineItemWarpper();
            lineItem.setLineId(entry.getKey());
            lineItem.setLineName(lineNameMap.get(entry.getKey()));
            List<LineShiftItemWarpper> shifts = new ArrayList<>();
            for (Map<String, Object> shiftMap : entry.getValue()) {
                LineShiftItemWarpper shiftItem = new LineShiftItemWarpper();
                shiftItem.setLineShiftId(Integer.valueOf(shiftMap.get("lineShiftId").toString()));
                shiftItem.setLineShiftDriverId(Integer.valueOf(shiftMap.get("lineShiftDriverId").toString()));
                shiftItem.setStartTime(shiftMap.get("startTime").toString());
                shiftItem.setEndTime(shiftMap.get("endTime").toString());
                shiftItem.setLaveSeat(Integer.valueOf(shiftMap.get("laveSeat").toString()));
                shiftItem.setTotalSeat(Integer.valueOf(shiftMap.get("totalSeat").toString()));
                // 判断状态:已预约的班次,判断是否过期
                String endTime = shiftMap.get("endTime").toString();
                boolean isExpired = false;
                // 如果是今天,比较时间;如果是过去的日期,则已过期
                if (date.equals(today)) {
                    // 比较当前时间和班次结束时间
                    isExpired = currentTime.compareTo(endTime) >= 0;
                } else if (date.compareTo(today) < 0) {
                    // 过去的日期
                    isExpired = true;
                }
                if (isExpired) {
                    // 已过期
                    shiftItem.setStatus(2);
                    shiftItem.setStatusText("已过期");
                    shiftItem.setCanOperate(false);
                } else {
                    // 已预约可操作
                    shiftItem.setStatus(1);
                    shiftItem.setStatusText("预约");
                    shiftItem.setCanOperate(true);
                }
                shifts.add(shiftItem);
            }
            lineItem.setShifts(shifts);
            lineList.add(lineItem);
        }
        result.setLineList(lineList);
        return result;
    }
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/warpper/DriverShiftListWarpper.java
New file
@@ -0,0 +1,76 @@
package com.stylefeng.guns.modular.crossCity.warpper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
/**
 * 司机排班列表包装类
 */
@ApiModel("司机排班列表")
public class DriverShiftListWarpper {
    @ApiModelProperty("线路列表")
    private List<LineItemWarpper> lineList;
    public List<LineItemWarpper> getLineList() {
        return lineList;
    }
    public void setLineList(List<LineItemWarpper> lineList) {
        this.lineList = lineList;
    }
    @Override
    public String toString() {
        return "DriverShiftListWarpper{" +
                "lineList=" + lineList +
                '}';
    }
    /**
     * 线路项包装类
     */
    @ApiModel("线路项")
    public static class LineItemWarpper {
        @ApiModelProperty("线路id")
        private Integer lineId;
        @ApiModelProperty("线路名称")
        private String lineName;
        @ApiModelProperty("班次列表")
        private List<LineShiftItemWarpper> shifts;
        public Integer getLineId() {
            return lineId;
        }
        public void setLineId(Integer lineId) {
            this.lineId = lineId;
        }
        public String getLineName() {
            return lineName;
        }
        public void setLineName(String lineName) {
            this.lineName = lineName;
        }
        public List<LineShiftItemWarpper> getShifts() {
            return shifts;
        }
        public void setShifts(List<LineShiftItemWarpper> shifts) {
            this.shifts = shifts;
        }
        @Override
        public String toString() {
            return "LineItemWarpper{" +
                    "lineId=" + lineId +
                    ", lineName='" + lineName + '\'' +
                    ", shifts=" + shifts +
                    '}';
        }
    }
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/warpper/LineShiftItemWarpper.java
New file
@@ -0,0 +1,146 @@
package com.stylefeng.guns.modular.crossCity.warpper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * 班次项包装类
 */
@ApiModel("班次项")
public class LineShiftItemWarpper {
    @ApiModelProperty("班次id")
    private Integer lineShiftId;
    @ApiModelProperty("司机排班记录id")
    private Integer lineShiftDriverId;
    @ApiModelProperty("开始时间")
    private String startTime;
    @ApiModelProperty("结束时间")
    private String endTime;
    @ApiModelProperty("状态(1=已预约可操作, 2=已过期, 3=未预约)")
    private Integer status;
    @ApiModelProperty("状态文本")
    private String statusText;
    @ApiModelProperty("是否可以扫码下单/代客下单")
    private Boolean canOperate;
    @ApiModelProperty("剩余座位")
    private Integer laveSeat;
    @ApiModelProperty("总座位")
    private Integer totalSeat;
    public Integer getLineShiftId() {
        return lineShiftId;
    }
    public void setLineShiftId(Integer lineShiftId) {
        this.lineShiftId = lineShiftId;
    }
    public Integer getLineShiftDriverId() {
        return lineShiftDriverId;
    }
    public void setLineShiftDriverId(Integer lineShiftDriverId) {
        this.lineShiftDriverId = lineShiftDriverId;
    }
    public String getStartTime() {
        return startTime;
    }
    public void setStartTime(String startTime) {
        this.startTime = startTime;
    }
    public String getEndTime() {
        return endTime;
    }
    public void setEndTime(String endTime) {
        this.endTime = endTime;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public String getStatusText() {
        return statusText;
    }
    public void setStatusText(String statusText) {
        this.statusText = statusText;
    }
    public Boolean getCanOperate() {
        return canOperate;
    }
    public void setCanOperate(Boolean canOperate) {
        this.canOperate = canOperate;
    }
    public Integer getLaveSeat() {
        return laveSeat;
    }
    public void setLaveSeat(Integer laveSeat) {
        this.laveSeat = laveSeat;
    }
    public Integer getTotalSeat() {
        return totalSeat;
    }
    public void setTotalSeat(Integer totalSeat) {
        this.totalSeat = totalSeat;
    }
    @Override
    public String toString() {
        return "LineShiftItemWarpper{" +
                "lineShiftId=" + lineShiftId +
                ", lineShiftDriverId=" + lineShiftDriverId +
                ", startTime='" + startTime + '\'' +
                ", endTime='" + endTime + '\'' +
                ", status=" + status +
                ", statusText='" + statusText + '\'' +
                ", canOperate=" + canOperate +
                ", laveSeat=" + laveSeat +
                ", totalSeat=" + totalSeat +
                '}';
    }
    public static LineShiftItemWarpper getLineShiftItemWarpper(Map<String, Object> map) {
        LineShiftItemWarpper warpper = new LineShiftItemWarpper();
        if (null != map) {
            warpper.setLineShiftId(null != map.get("lineShiftId") ? Integer.valueOf(map.get("lineShiftId").toString()) : null);
            warpper.setLineShiftDriverId(null != map.get("lineShiftDriverId") ? Integer.valueOf(map.get("lineShiftDriverId").toString()) : null);
            warpper.setStartTime(null != map.get("startTime") ? map.get("startTime").toString() : "");
            warpper.setEndTime(null != map.get("endTime") ? map.get("endTime").toString() : "");
            warpper.setStatus(null != map.get("status") ? Integer.valueOf(map.get("status").toString()) : 3);
            warpper.setStatusText(null != map.get("statusText") ? map.get("statusText").toString() : "");
            warpper.setCanOperate(null != map.get("canOperate") ? Boolean.valueOf(map.get("canOperate").toString()) : false);
            warpper.setLaveSeat(null != map.get("laveSeat") ? Integer.valueOf(map.get("laveSeat").toString()) : 0);
            warpper.setTotalSeat(null != map.get("totalSeat") ? Integer.valueOf(map.get("totalSeat").toString()) : 0);
        }
        return warpper;
    }
    public static List<LineShiftItemWarpper> getLineShiftItemWarppers(List<Map<String, Object>> maps) {
        List<LineShiftItemWarpper> list = new ArrayList<>();
        if (null != maps) {
            for (Map<String, Object> map : maps) {
                list.add(LineShiftItemWarpper.getLineShiftItemWarpper(map));
            }
        }
        return list;
    }
}