Merge remote-tracking branch 'origin/dev' into dev
| | |
| | | package com.stylefeng.guns.modular.crossCity.controller; |
| | | |
| | | import cn.hutool.core.date.DateUnit; |
| | | 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.system.service.IDriverService; |
| | | import com.stylefeng.guns.modular.system.util.ResultUtil; |
| | | import com.stylefeng.guns.modular.system.util.SystemException; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiImplicitParam; |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * 【202601】城际专线排班控制器 |
| | |
| | | if (null == driverId) { |
| | | return ResultUtil.tokenErr(); |
| | | } |
| | | ResultUtil<DriverShiftListWarpper> driverShiftListWarpperResultUtil = validateDate(date); |
| | | if (driverShiftListWarpperResultUtil.getCode().equals(ResultUtil.ERROR)) { |
| | | return driverShiftListWarpperResultUtil; |
| | | } |
| | | DriverShiftListWarpper result = lineShiftDriverService.queryDriverShiftList(driverId, date); |
| | | return ResultUtil.success(result); |
| | | } catch (Exception e) { |
| | |
| | | return ResultUtil.runErr(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 验证日期有效性 |
| | | * @param dateStr |
| | | * @return |
| | | */ |
| | | public ResultUtil<DriverShiftListWarpper> validateDate(String dateStr) { |
| | | // 解析日期 |
| | | Date targetDate = DateUtil.parse(dateStr, "yyyy-MM-dd"); |
| | | Date today = DateUtil.beginOfDay(new Date()); // 今天 00:00:00 |
| | | |
| | | // 1. 不能是今天之前的日期 |
| | | if (targetDate.before(today)) { |
| | | return ResultUtil.error("日期不能早于今天"); |
| | | } |
| | | |
| | | // 2. 必须在7天内(包含今天,即今天 + 6天) |
| | | long daysBetween = DateUtil.between(today, targetDate, DateUnit.DAY); |
| | | |
| | | if (daysBetween > 6) { // 今天是第1天,所以差值最大为6 |
| | | return ResultUtil.error("只能查询7天内的排班信息"); |
| | | } |
| | | return ResultUtil.success(); |
| | | } |
| | | } |
| | |
| | | package com.stylefeng.guns.modular.crossCity.controller; |
| | | |
| | | |
| | | import cn.hutool.core.io.FileUtil; |
| | | import cn.hutool.http.HttpRequest; |
| | | import cn.hutool.http.HttpResponse; |
| | | import cn.hutool.http.HttpUtil; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.stylefeng.guns.core.util.ToolUtil; |
| | | import com.stylefeng.guns.modular.account.service.ITEnterpriseWithdrawalService; |
| | |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.File; |
| | | import java.io.InputStream; |
| | | import java.io.PrintWriter; |
| | | import java.math.BigDecimal; |
| | | import java.util.Map; |
| | | import java.util.UUID; |
| | | |
| | | |
| | | @Api |
| | |
| | | |
| | | @Value("${spring.profiles.active}") |
| | | private String env; |
| | | |
| | | @Value("${filePath}") |
| | | private String filePath; |
| | | |
| | | @Value("${qyt.admin_url}") |
| | | private String adminUrl; |
| | | |
| | | |
| | | |
| | |
| | | return ResultUtil.error("生成小程序码失败"); |
| | | } |
| | | |
| | | // 5. 上传到OSS |
| | | String qrCodeUrl = OssUploadUtil.ossUploadByStream(driverId, inputStream); |
| | | if (ToolUtil.isEmpty(qrCodeUrl)) { |
| | | return ResultUtil.error("上传小程序码失败"); |
| | | // 5. 上传到服务器 |
| | | File file = FileUtil.writeFromStream(inputStream, new File(filePath + "/" + UUID.randomUUID().toString() + ".png")); |
| | | HttpRequest post = HttpUtil.createPost(adminUrl + "/upload/image"); |
| | | post.form("file", file); |
| | | HttpResponse execute = post.execute(); |
| | | int status = execute.getStatus(); |
| | | if(200 != status){ |
| | | throw new RuntimeException("上传图片异常"); |
| | | } |
| | | |
| | | // 6. 返回结果 |
| | | BaseWarpper baseWarpper = new BaseWarpper(); |
| | | baseWarpper.setContent(qrCodeUrl); |
| | | baseWarpper.setContent(execute.body()); |
| | | return ResultUtil.success(baseWarpper); |
| | | |
| | | } catch (Exception e) { |
| | |
| | | package com.stylefeng.guns.modular.crossCity.server.impl; |
| | | |
| | | import cn.hutool.core.date.DateUnit; |
| | | import cn.hutool.cron.CronUtil; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import com.stylefeng.guns.core.util.ToolUtil; |
| | |
| | | |
| | | DriverShiftListWarpper result = new DriverShiftListWarpper(); |
| | | |
| | | // 获取司机的服务车型ID(跨城业务 type=3) |
| | | Integer serverCarModelId = null; |
| | | Integer carId = driverService.selectById(driverId).getCarId(); |
| | | if (carId != null) { |
| | | CarService carServiceQuery = carServiceMapper.query(3, carId); |
| | | if (carServiceQuery != null) { |
| | | serverCarModelId = carServiceQuery.getServerCarModelId(); |
| | | } |
| | | } |
| | | |
| | | // 查询司机在指定日期的排班信息 |
| | | List<Map<String, Object>> shiftList = lineShiftDriverMapper.queryDriverShiftByDate(driverId, date); |
| | | |
| | |
| | | DriverShiftListWarpper.LineItemWarpper lineItem = new DriverShiftListWarpper.LineItemWarpper(); |
| | | lineItem.setLineId(entry.getKey()); |
| | | lineItem.setLineName(lineNameMap.get(entry.getKey())); |
| | | |
| | | // 查询线路单价 |
| | | Double unitPrice = null; |
| | | if (serverCarModelId != null) { |
| | | Map<String, Object> priceInfo = linePriceMapper.query(entry.getKey(), serverCarModelId); |
| | | if (priceInfo != null && priceInfo.get("content") != null) { |
| | | // 解析 content JSON,获取 num1(单人价格) |
| | | String content = priceInfo.get("content").toString(); |
| | | JSONObject jsonObject = JSON.parseObject(content); |
| | | String num1 = jsonObject.getString("num1"); |
| | | if (num1 != null && !num1.isEmpty()) { |
| | | unitPrice = Double.parseDouble(num1); |
| | | } |
| | | } |
| | | } |
| | | lineItem.setUnitPrice(unitPrice); |
| | | |
| | | List<LineShiftItemWarpper> shifts = new ArrayList<>(); |
| | | for (Map<String, Object> shiftMap : entry.getValue()) { |
| | |
| | | } else { |
| | | // 已预约可操作 |
| | | shiftItem.setStatus(1); |
| | | shiftItem.setStatusText("预约"); |
| | | shiftItem.setStatusText("已预约"); |
| | | shiftItem.setCanOperate(true); |
| | | } |
| | | |
| | |
| | | if (ToolUtil.isEmpty(warpper.getPassengersPhone())) { |
| | | return ResultUtil.error("乘客手机号不能为空"); |
| | | } |
| | | if (warpper.getPlacementLat() == null || warpper.getPlacementLon() == null || ToolUtil.isEmpty(warpper.getPlacementAddress())) { |
| | | return ResultUtil.error("下单地点点信息不完整"); |
| | | } |
| | | if (warpper.getStartLon() == null || warpper.getStartLat() == null || ToolUtil.isEmpty(warpper.getStartAddress())) { |
| | | return ResultUtil.error("上车点信息不完整"); |
| | | } |
| | |
| | | // 下单地点 |
| | | orderCrossCity.setPlacementLat(warpper.getPlacementLat()); |
| | | orderCrossCity.setPlacementLon(warpper.getPlacementLon()); |
| | | String placementAddress = warpper.getStartAddress(); |
| | | String placementAddress = warpper.getPlacementAddress(); |
| | | placementAddress = placementAddress.replaceAll("& #40;", "("); |
| | | placementAddress = placementAddress.replaceAll("& #41;", ")"); |
| | | orderCrossCity.setPlacementAddress(placementAddress); |
| | |
| | | private Integer lineId; |
| | | @ApiModelProperty("线路名称") |
| | | private String lineName; |
| | | @ApiModelProperty("线路单价(单人价格)") |
| | | private Double unitPrice; |
| | | @ApiModelProperty("班次列表") |
| | | private List<LineShiftItemWarpper> shifts; |
| | | |
| | |
| | | this.lineName = lineName; |
| | | } |
| | | |
| | | public Double getUnitPrice() { |
| | | return unitPrice; |
| | | } |
| | | |
| | | public void setUnitPrice(Double unitPrice) { |
| | | this.unitPrice = unitPrice; |
| | | } |
| | | |
| | | public List<LineShiftItemWarpper> getShifts() { |
| | | return shifts; |
| | | } |
| | |
| | | return "LineItemWarpper{" + |
| | | "lineId=" + lineId + |
| | | ", lineName='" + lineName + '\'' + |
| | | ", unitPrice=" + unitPrice + |
| | | ", shifts=" + shifts + |
| | | '}'; |
| | | } |
| | |
| | | |
| | | import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService; |
| | | import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityWarpper; |
| | | import com.stylefeng.guns.modular.crossCity.warpper.ScanOrderDetailWarpper; |
| | | import com.stylefeng.guns.modular.system.service.IUserInfoService; |
| | | import com.stylefeng.guns.modular.system.util.ResultUtil; |
| | | import com.stylefeng.guns.modular.system.util.SystemException; |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 【202601】获取扫码下单详情 |
| | | * @param lineShiftDriverId 司机排班记录ID |
| | | * @param otherFee 其他费用 |
| | | * @return 扫码下单详情 |
| | | */ |
| | | @ResponseBody |
| | | @RequestMapping(value = "/api/orderCrossCity/queryScanOrderDetail", method = RequestMethod.POST) |
| | | @ApiOperation(value = "【202601】获取扫码下单详情", tags = {"用户端-跨城"}, notes = "根据扫码内容获取下单页面详情数据,包含司机信息、线路信息、站点信息等") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(value = "司机排班记录ID", name = "lineShiftDriverId", required = true, dataType = "int"), |
| | | @ApiImplicitParam(value = "其他费用", name = "otherFee", required = false, dataType = "double") |
| | | }) |
| | | public ResultUtil<ScanOrderDetailWarpper> queryScanOrderDetail(Integer lineShiftDriverId, Double otherFee) { |
| | | try { |
| | | return orderCrossCityService.queryScanOrderDetail(lineShiftDriverId, otherFee); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return ResultUtil.runErr(); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.mapper.BaseMapper; |
| | | import com.stylefeng.guns.modular.crossCity.model.LineShiftDriver; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.Map; |
| | | |
| | | public interface LineShiftDriverMapper extends BaseMapper<LineShiftDriver> { |
| | | |
| | | /** |
| | | * 【202601】根据司机排班记录ID查询扫码下单详情 |
| | | * @param lineShiftDriverId 司机排班记录ID |
| | | * @return 扫码下单详情数据 |
| | | */ |
| | | Map<String, Object> queryScanOrderDetail(@Param("lineShiftDriverId") Integer lineShiftDriverId); |
| | | } |
| | |
| | | <result column="totalSeat" property="totalSeat"/> |
| | | <result column="inserTime" property="inserTime"/> |
| | | </resultMap> |
| | | |
| | | <!-- 【202601】根据司机排班记录ID查询扫码下单详情 --> |
| | | <select id="queryScanOrderDetail" resultType="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, |
| | | |
| | | -- 其他信息 |
| | | 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> |
| | |
| | | import com.baomidou.mybatisplus.service.IService; |
| | | import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity; |
| | | import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityWarpper; |
| | | import com.stylefeng.guns.modular.crossCity.warpper.ScanOrderDetailWarpper; |
| | | import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; |
| | | import com.stylefeng.guns.modular.system.model.vo.UnPayOrderVO; |
| | | import com.stylefeng.guns.modular.system.util.ResultUtil; |
| | |
| | | |
| | | List<Map<String, Object>> queryMyTripList(Integer uid, Integer pageNum, Integer size) throws Exception; |
| | | List<Map<String, Object>> queryMyTripListAll(Integer uid) throws Exception; |
| | | |
| | | /** |
| | | * 【202601】获取扫码下单详情 |
| | | * @param lineShiftDriverId 司机排班记录ID |
| | | * @param otherFee 其他费用 |
| | | * @return 扫码下单详情 |
| | | * @throws Exception |
| | | */ |
| | | ResultUtil<ScanOrderDetailWarpper> queryScanOrderDetail(Integer lineShiftDriverId, Double otherFee) throws Exception; |
| | | } |
| | |
| | | import com.stylefeng.guns.modular.crossCity.server.ILineService; |
| | | import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService; |
| | | import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityWarpper; |
| | | import com.stylefeng.guns.modular.crossCity.warpper.ScanOrderDetailWarpper; |
| | | import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService; |
| | | import com.stylefeng.guns.modular.specialTrain.dao.OrderPrivateCarMapper; |
| | | import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; |
| | |
| | | } |
| | | return maps; |
| | | } |
| | | |
| | | /** |
| | | * 【202601】获取扫码下单详情 |
| | | * @param lineShiftDriverId 司机排班记录ID |
| | | * @param otherFee 其他费用 |
| | | * @return 扫码下单详情 |
| | | * @throws Exception |
| | | */ |
| | | @Override |
| | | public ResultUtil<ScanOrderDetailWarpper> queryScanOrderDetail(Integer lineShiftDriverId, Double otherFee) throws Exception { |
| | | // 1. 查询基础数据 |
| | | Map<String, Object> data = lineShiftDriverMapper.queryScanOrderDetail(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.setOtherFee(otherFee); |
| | | 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); |
| | | } |
| | | } |
| New file |
| | |
| | | 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; |
| | | |
| | | } |