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