“mitao”
2026-01-09 6ff8be14e9264c509422a0e7bee282ae44b6a3b4
feat:司机端代客下单创建订单
1个文件已添加
4个文件已修改
484 ■■■■■ 已修改文件
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/controller/OrderCrossCityController.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/model/OrderCrossCity.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java 293 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/warpper/OrderCrossCityOnBehalfWarpper.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/controller/OrderCrossCityController.java
@@ -5,8 +5,11 @@
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.account.service.ITEnterpriseWithdrawalService;
import com.stylefeng.guns.modular.account.service.UserWithdrawalService;
import com.stylefeng.guns.modular.crossCity.model.LineShiftDriver;
import com.stylefeng.guns.modular.crossCity.server.ILineShiftDriverService;
import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService;
import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityInfoWrapper;
import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityOnBehalfWarpper;
import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityWarpper;
import com.stylefeng.guns.modular.crossCity.warpper.OrderWarpper;
import com.stylefeng.guns.modular.system.model.Reassign;
@@ -16,17 +19,22 @@
import com.stylefeng.guns.modular.system.util.PayMoneyUtil;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.util.SystemException;
import com.stylefeng.guns.modular.system.util.WeChatUtil;
import com.stylefeng.guns.modular.system.util.OssUploadUtil;
import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
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.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.Map;
@@ -52,6 +60,15 @@
    private ICompanyService companyService;
    @Autowired
    private ITEnterpriseWithdrawalService enterpriseWithdrawalService;
    @Autowired
    private WeChatUtil weChatUtil;
    @Autowired
    private ILineShiftDriverService lineShiftDriverService;
    @Value("${spring.profiles.active}")
    private String env;
@@ -345,4 +362,103 @@
    }
    /**
     * 生成跨城扫码下单小程序码
     * @param lineShiftDriverId 司机排班记录ID(班次ID)
     * @param otherFee 其他费用金额(可选)
     * @param request HttpServletRequest
     * @return 小程序码图片URL
     */
    @ResponseBody
    @PostMapping("/api/orderCrossCity/generateScanOrderQrCode")
    @ApiOperation(value = "【202601】生成跨城扫码下单小程序码", tags = {"司机端-服务中"}, notes = "司机展示小程序码给客户扫码下单")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "司机排班记录ID(班次ID)", name = "lineShiftDriverId", required = true, dataType = "int"),
            @ApiImplicitParam(value = "其他费用金额", name = "otherFee", required = false, dataType = "BigDecimal"),
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResultUtil<BaseWarpper> generateScanOrderQrCode(Integer lineShiftDriverId, BigDecimal otherFee, HttpServletRequest request) {
        try {
            // 1. 验证Token获取司机ID
            Integer driverId = driverService.getUserIdFormRedis(request);
            if (null == driverId) {
                return ResultUtil.tokenErr();
            }
            // 2. 校验班次有效性
            LineShiftDriver lineShiftDriver = lineShiftDriverService.selectById(lineShiftDriverId);
            if (null == lineShiftDriver) {
                return ResultUtil.error("班次信息不存在");
            }
            if (!driverId.equals(lineShiftDriver.getDriverId())) {
                return ResultUtil.error("无权操作此班次");
            }
            // 3. 构建scene参数(最大32字符)
            StringBuilder sceneBuilder = new StringBuilder();
            sceneBuilder.append("id=").append(lineShiftDriverId);
            if (ToolUtil.isNotEmpty(otherFee)) {
                sceneBuilder.append("&f=").append(otherFee);
            }
            String scene = sceneBuilder.toString();
            // 4. 生成小程序码
            String page = "pages/scanOrder/scanOrder";  // 小程序跳转页面
            String envVersion = env.equals("prod") ? "release" : "trial";     // 正式版环境
            InputStream inputStream = weChatUtil.getwxacodeunlimit(page, scene, envVersion);
            if (null == inputStream) {
                return ResultUtil.error("生成小程序码失败");
            }
            // 5. 上传到OSS
            String qrCodeUrl = OssUploadUtil.ossUploadByStream(driverId, inputStream);
            if (ToolUtil.isEmpty(qrCodeUrl)) {
                return ResultUtil.error("上传小程序码失败");
            }
            // 6. 返回结果
            BaseWarpper baseWarpper = new BaseWarpper();
            baseWarpper.setContent(qrCodeUrl);
            return ResultUtil.success(baseWarpper);
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
    /**
     * 跨城代客下单
     * @param warpper 代客下单参数
     * @param request HttpServletRequest
     * @return 订单ID
     */
    @ResponseBody
    @PostMapping("/api/orderCrossCity/orderOnBehalf")
    @ApiOperation(value = "【202601】跨城代客下单", tags = {"司机端-服务中"}, notes = "司机代乘客下单,乘客通过手机号登录小程序支付")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResultUtil<BaseWarpper> orderCrossCityOnBehalf(OrderCrossCityOnBehalfWarpper warpper, HttpServletRequest request) {
        try {
            // 1. 验证Token获取司机ID
            Integer driverId = driverService.getUserIdFormRedis(request);
            if (null == driverId) {
                return ResultUtil.tokenErr();
            }
            // 2. 调用Service执行代客下单
            return orderCrossCityService.orderCrossCityOnBehalf(warpper, driverId);
        } catch (SystemException se) {
            return ResultUtil.error(se.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/model/OrderCrossCity.java
@@ -413,6 +413,15 @@
    private Date recoveryOrderCreateDate;
    private BigDecimal otherFee;
    public BigDecimal getOtherFee() {
        return otherFee;
    }
    public void setOtherFee(BigDecimal otherFee) {
        this.otherFee = otherFee;
    }
    public Integer getResponsibilityType() {
        return responsibilityType;
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity;
import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityOnBehalfWarpper;
import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityWarpper;
import com.stylefeng.guns.modular.system.model.OrderPosition;
import com.stylefeng.guns.modular.system.util.ResultUtil;
@@ -166,4 +167,14 @@
    ResultUtil cancleOrder(Integer orderId) throws Exception;
    /**
     * 跨城代客下单操作
     * @param warpper 代客下单参数
     * @param driverId 司机ID
     * @return 订单ID
     * @throws Exception
     */
    ResultUtil<BaseWarpper> orderCrossCityOnBehalf(OrderCrossCityOnBehalfWarpper warpper, Integer driverId) throws Exception;
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -14,9 +14,12 @@
import com.stylefeng.guns.modular.crossCity.dao.OrderCrossCityMapper;
import com.stylefeng.guns.modular.crossCity.model.Line;
import com.stylefeng.guns.modular.crossCity.model.LineShiftDriver;
import com.stylefeng.guns.modular.crossCity.model.LineSite;
import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity;
import com.stylefeng.guns.modular.crossCity.server.ILineService;
import com.stylefeng.guns.modular.crossCity.server.ILineSiteService;
import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService;
import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityOnBehalfWarpper;
import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityWarpper;
import com.stylefeng.guns.modular.specialTrain.dao.OrderPrivateCarMapper;
import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
@@ -60,6 +63,9 @@
    @Autowired
    private ILineService lineService;
    @Autowired
    private ILineSiteService lineSiteService;
    @Autowired
    private ISystemNoticeService systemNoticeService;
@@ -166,7 +172,8 @@
    private CarServiceImpl carServiceImpl;
    @Autowired
    private ICompanyService companyService;
    @Autowired
    private CarServiceMapper carServiceMapper;
    @Autowired
    private WeChatUtil weChatUtil;
@@ -1240,4 +1247,288 @@
        }
        return ResultUtil.success();
    }
    /**
     * 跨城代客下单操作
     * @param warpper 代客下单参数
     * @param driverId 司机ID
     * @return 订单ID
     * @throws Exception
     */
    @Override
    public synchronized ResultUtil<BaseWarpper> orderCrossCityOnBehalf(OrderCrossCityOnBehalfWarpper warpper, Integer driverId) throws Exception {
        // 1. 参数校验
        if (warpper.getLineShiftDriverId() == null) {
            return ResultUtil.error("班次ID不能为空");
        }
        if (warpper.getPeopleNumber() == null || warpper.getPeopleNumber() < 1 || warpper.getPeopleNumber() > 7) {
            return ResultUtil.error("乘车人数必须在1-7之间");
        }
        if (ToolUtil.isEmpty(warpper.getPassengersPhone())) {
            return ResultUtil.error("乘客手机号不能为空");
        }
        if (warpper.getStartLon() == null || warpper.getStartLat() == null || ToolUtil.isEmpty(warpper.getStartAddress())) {
            return ResultUtil.error("上车点信息不完整");
        }
        if (warpper.getEndLon() == null || warpper.getEndLat() == null || ToolUtil.isEmpty(warpper.getEndAddress())) {
            return ResultUtil.error("下车点信息不完整");
        }
        if (warpper.getOtherFee() != null && warpper.getOtherFee().compareTo(BigDecimal.ZERO) < 0) {
            return ResultUtil.error("其他费用不能为负数");
        }
        // 2. 校验班次信息
        LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(warpper.getLineShiftDriverId());
        if (lineShiftDriver == null) {
            return ResultUtil.error("班次信息不存在");
        }
        if (!driverId.equals(lineShiftDriver.getDriverId())) {
            return ResultUtil.error("无权操作此班次");
        }
        // 3. 校验剩余座位数
        if (lineShiftDriver.getLaveSeat() < warpper.getPeopleNumber()) {
            return ResultUtil.error("座位不足,无法下单");
        }
        // 4. 自动分配座位号
        String laveSeatNumber = lineShiftDriver.getLaveSeatNumber();
        if (ToolUtil.isEmpty(laveSeatNumber)) {
            return ResultUtil.error("无可用座位");
        }
        String[] availableSeats = laveSeatNumber.split(",");
        if (availableSeats.length < warpper.getPeopleNumber()) {
            return ResultUtil.error("座位不足,无法下单");
        }
        // 取前 peopleNumber 个座位
        StringBuilder seatNumberBuilder = new StringBuilder();
        for (int i = 0; i < warpper.getPeopleNumber(); i++) {
            if (i > 0) {
                seatNumberBuilder.append(",");
            }
            seatNumberBuilder.append(availableSeats[i]);
        }
        String seatNumber = seatNumberBuilder.toString();
        // 5. 获取司机信息
        Driver driver = driverService.selectById(driverId);
        if (driver == null) {
            return ResultUtil.error("司机信息不存在");
        }
        if (driver.getState() == 1) {
            return ResultUtil.error("司机处于离线状态");
        }
        // 6. 获取线路班次信息
        LineSite lineSite = lineSiteService.selectById(lineShiftDriver.getLineShiftId());
        if (lineSite == null) {
            return ResultUtil.error("线路班次信息不存在");
        }
        Line line = lineService.selectById(lineSite.getLineId());
        if (line == null) {
            return ResultUtil.error("线路信息不存在");
        }
        // 7. 处理用户信息
        UserInfo userInfo = userInfoMapper.queryByPhone(warpper.getPassengersPhone());
        if (userInfo == null) {
            // 自动创建用户
            userInfo = new UserInfo();
            Integer integer = userInfoMapper.selectCount(null) + 1000001;
            userInfo.setNickName("GRJY" + String.valueOf(integer).substring(1));
            userInfo.setPhone(warpper.getPassengersPhone());
            userInfo.setState(1);
            userInfo.setFlag(1);
            userInfo.setInsertTime(new Date());
            userInfo.setInsertUser(driverId);
            userInfoMapper.insert(userInfo);
        }
        // 8. 检查用户是否有未完成订单
        List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(userInfo.getId(), 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12);
        if (orderPrivateCars.size() > 0) {
            return ResultUtil.error("该乘客有未完成的订单");
        }
        List<OrderTaxi> orderTaxis = orderTaxiMapper.queryByState_(userInfo.getId(), 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12);
        if (orderTaxis.size() > 0) {
            return ResultUtil.error("该乘客有未完成的订单");
        }
        List<OrderCrossCity> orderCrossCities1 = orderCrossCityMapper.queryByState(userInfo.getId(), 1, 2, 3, 4, 5, 6, 7, 11, 12);
        if (orderCrossCities1.size() > 0) {
            return ResultUtil.error("该乘客有未完成的订单");
        }
        // 9. 检查司机是否正在服务中
        List<OrderCrossCity> orderCrossCities2 = orderCrossCityMapper.queryOrders(driverId, warpper.getLineShiftDriverId(), Arrays.asList(5));
        if (orderCrossCities2.size() > 0) {
            return ResultUtil.error("司机正在服务中");
        }
        // 10. 计算价格
        Map<String, String> distanceMap = gdMapElectricFenceUtil.getDistance(
                warpper.getStartLon() + "," + warpper.getStartLat(),
                warpper.getEndLon() + "," + warpper.getEndLat(), 1);
        if (distanceMap == null) {
            return ResultUtil.error("计算行程距离出错");
        }
        Double distance = Double.valueOf(distanceMap.get("distance"));
        // 获取车辆信息
        Car car = carServiceImpl.selectById(driver.getCarId());
        if (car == null) {
            return ResultUtil.error("车辆信息不存在");
        }
        CarModel carModel = carModelMapper.selectById(car.getCarModelId());
        if (carModel == null) {
            return ResultUtil.error("车型信息不存在");
        }
        CarService carService = carServiceMapper.query(3, driver.getCarId());
        if(null == carService){
            return ResultUtil.error("车辆未开通该服务");
        }
        ResultUtil<Map<String, Object>> priceResult = this.getPrice(distance, warpper.getPeopleNumber(), 1,
                lineSite.getLineId(), carService.getServerCarModelId(), lineShiftDriver.getTotalSeat(), seatNumber);
        if (priceResult.getCode() != 200) {
            return ResultUtil.error("计算价格失败");
        }
        Double ticketPrice = Double.valueOf(priceResult.getData().get("price").toString());
        // 计算合计费用
        Double otherFee = warpper.getOtherFee() != null ? warpper.getOtherFee().setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue() : 0D;
        Double totalMoney = new BigDecimal(ticketPrice).add(new BigDecimal(otherFee)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        // 11. 创建订单
        OrderCrossCity orderCrossCity = new OrderCrossCity();
        orderCrossCity.setUserId(userInfo.getId());
        orderCrossCity.setPassengers(userInfo.getName());
        orderCrossCity.setPassengersPhone(warpper.getPassengersPhone());
        orderCrossCity.setServerCarModelId(carService.getServerCarModelId());
        orderCrossCity.setDriverId(driverId);
        orderCrossCity.setLineId(lineSite.getLineId());
        orderCrossCity.setCarId(driver.getCarId());
        orderCrossCity.setOrderNum(this.getOrderNum(driverId, warpper.getLineShiftDriverId()));
        // 下单地点
        orderCrossCity.setPlacementLat(warpper.getPlacementLat());
        orderCrossCity.setPlacementLon(warpper.getPlacementLon());
        String placementAddress = warpper.getStartAddress();
        placementAddress = placementAddress.replaceAll("& #40;", "(");
        placementAddress = placementAddress.replaceAll("& #41;", ")");
        orderCrossCity.setPlacementAddress(placementAddress);
        // 上车点
        orderCrossCity.setStartLon(warpper.getStartLon());
        orderCrossCity.setStartLat(warpper.getStartLat());
        String startAddress = warpper.getStartAddress();
        startAddress = startAddress.replaceAll("& #40;", "(");
        startAddress = startAddress.replaceAll("& #41;", ")");
        orderCrossCity.setStartAddress(startAddress);
        // 下车点
        orderCrossCity.setEndLon(warpper.getEndLon());
        orderCrossCity.setEndLat(warpper.getEndLat());
        String endAddress = warpper.getEndAddress();
        endAddress = endAddress.replaceAll("& #40;", "(");
        endAddress = endAddress.replaceAll("& #41;", ")");
        orderCrossCity.setEndAddress(endAddress);
        orderCrossCity.setMileage(0D);
        orderCrossCity.setOrderMoney(totalMoney);
        orderCrossCity.setCompanyId(driver.getCompanyId());
        orderCrossCity.setPeopleNumber(warpper.getPeopleNumber());
        orderCrossCity.setSeatNumber(seatNumber);
        List<OrderCrossCity> orderCrossCities = this.selectList(new EntityWrapper<OrderCrossCity>().eq("orderNum", orderCrossCity.getOrderNum()).eq("isDelete", 1));
        orderCrossCity.setSort(orderCrossCities.size() + 1);
        orderCrossCity.setState(7); // 待支付
        orderCrossCity.setInsertTime(new Date());
        // 设置出行时间为班次日期+开始时间
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(lineShiftDriver.getDay());
        String[] startTimeParts = lineSite.getStartTime().split(":");
        calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(startTimeParts[0]));
        calendar.set(Calendar.MINUTE, Integer.parseInt(startTimeParts[1]));
        calendar.set(Calendar.SECOND, 0);
        orderCrossCity.setTravelTime(calendar.getTime());
        orderCrossCity.setSnatchOrderTime(new Date());
        orderCrossCity.setTravelMode(1); // 固定拼车
        orderCrossCity.setIsDelete(1);
        orderCrossCity.setIsReassign(1);
        orderCrossCity.setLineShiftDriverId(warpper.getLineShiftDriverId());
        orderCrossCity.setOrderSource(4); // 司机下单
        orderCrossCity.setOtherFee(warpper.getOtherFee());
        this.insert(orderCrossCity);
        // 13. 更新司机状态
        if (driver.getState() == 2) {
            driver.setState(3);
            driverService.updateById(driver);
        }
        // 14. 更新班次座位信息
        lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() - warpper.getPeopleNumber());
        // 更新剩余座位号
        StringBuilder newLaveSeatNumber = new StringBuilder();
        for (int i = warpper.getPeopleNumber(); i < availableSeats.length; i++) {
            if (newLaveSeatNumber.length() > 0) {
                newLaveSeatNumber.append(",");
            }
            newLaveSeatNumber.append(availableSeats[i]);
        }
        lineShiftDriver.setLaveSeatNumber(newLaveSeatNumber.toString());
        lineShiftDriverMapper.updateById(lineShiftDriver);
        // 15. 添加系统消息
        systemNoticeService.addSystemNotice(1, "您的跨城订单已下单成功,请尽快完成支付!", orderCrossCity.getUserId(), 1);
        // 16. 创建定时任务,30分钟未支付自动取消
        Integer orderId = orderCrossCity.getId();
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                OrderCrossCity order = orderCrossCityMapper.selectById(orderId);
                if (order.getState() == 7 && order.getPayMoney() == null) {
                    order.setState(10);
                    orderCrossCityMapper.updateById(order);
                    OrderCancel orderCancel = new OrderCancel();
                    orderCancel.setOrderId(orderId);
                    orderCancel.setOrderType(3);
                    orderCancel.setReason("用户未及时付款,系统自动取消订单");
                    orderCancel.setRemark("用户未及时付款,系统自动取消订单");
                    orderCancel.setState(2);
                    orderCancel.setInsertTime(new Date());
                    orderCancel.setUserType(2);
                    orderCancelService.insert(orderCancel);
                    // 恢复座位
                    LineShiftDriver lsd = lineShiftDriverMapper.selectById(order.getLineShiftDriverId());
                    lsd.setLaveSeat(lsd.getLaveSeat() + order.getPeopleNumber());
                    lsd.setLaveSeatNumber(
                            (ToolUtil.isNotEmpty(lsd.getLaveSeatNumber()) ? lsd.getLaveSeatNumber() + "," : "") +
                                    order.getSeatNumber()
                    );
                    lineShiftDriverMapper.updateById(lsd);
                    // 修改司机为空闲
                    List<OrderCrossCity> orders = orderCrossCityMapper.queryByDriverId(order.getDriverId(), 2, 3, 4, 5, 11);
                    if (orders.size() == 0) {
                        Driver d = driverService.selectById(order.getDriverId());
                        d.setState(2);
                        driverService.updateById(d);
                    }
                }
            }
        };
        Timer timer = new Timer();
        timer.schedule(timerTask, 30 * 60 * 1000);
        // 17. 返回结果
        BaseWarpper baseWarpper = new BaseWarpper();
        baseWarpper.setId(orderCrossCity.getId());
        return ResultUtil.success(baseWarpper);
    }
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/warpper/OrderCrossCityOnBehalfWarpper.java
New file
@@ -0,0 +1,55 @@
package com.stylefeng.guns.modular.crossCity.warpper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * 跨城代客下单请求参数
 */
@Data
@ApiModel("跨城代客下单参数")
public class OrderCrossCityOnBehalfWarpper {
    @ApiModelProperty(value = "司机排班记录ID(班次ID)", required = true, dataType = "int")
    private Integer lineShiftDriverId;
    @ApiModelProperty(value = "乘车人数", required = true, dataType = "int")
    private Integer peopleNumber;
    @ApiModelProperty(value = "乘客手机号", required = true, dataType = "string")
    private String passengersPhone;
    @ApiModelProperty(value = "下单地点经度", required = true, dataType = "double")
    private Double placementLon;
    @ApiModelProperty(value = "下单地点纬度", required = true, dataType = "double")
    private Double placementLat;
    @ApiModelProperty(value = "下单详细地址", required = true, dataType = "string")
    private String placementAddress;
    @ApiModelProperty(value = "上车点经度", required = true, dataType = "double")
    private Double startLon;
    @ApiModelProperty(value = "上车点纬度", required = true, dataType = "double")
    private Double startLat;
    @ApiModelProperty(value = "上车点地址", required = true, dataType = "string")
    private String startAddress;
    @ApiModelProperty(value = "下车点经度", required = true, dataType = "double")
    private Double endLon;
    @ApiModelProperty(value = "下车点纬度", required = true, dataType = "double")
    private Double endLat;
    @ApiModelProperty(value = "下车点地址", required = true, dataType = "string")
    private String endAddress;
    @ApiModelProperty(value = "其他费用(远程费、高速费、等待费等),>=0,保留两位小数", required = false, dataType = "BigDecimal")
    private BigDecimal otherFee;
}