yanghb
2023-04-21 59f70d9b19408d36f40ee0f418bf98232c40fb33
DispatchTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderPrivateCarServiceImpl.java
@@ -2,17 +2,16 @@
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;
import com.stylefeng.guns.modular.system.dao.CarServiceMapper;
import com.stylefeng.guns.modular.system.dao.OrderCrossCityMapper;
import com.stylefeng.guns.modular.system.dao.OrderPrivateCarMapper;
import com.stylefeng.guns.modular.system.dao.OrderTaxiMapper;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.model.Dispatch;
import com.stylefeng.guns.modular.system.model.Driver;
import com.stylefeng.guns.modular.system.model.OrderCancel;
import com.stylefeng.guns.modular.system.model.OrderPrivateCar;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.*;
import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
@@ -51,27 +50,6 @@
    @Autowired
    private ISystemNoticeService systemNoticeService;
    @Autowired
    private IUserInfoService userInfoService;
    @Autowired
    private GDMapGeocodingUtil gdMapGeocodingUtil;
    @Autowired
    private IDriverServiceService driverServiceService;
    @Resource
    private CarServiceMapper carServiceMapper;
    @Autowired
    private ChinaMobileUtil chinaMobileUtil;
    @Resource
    private OrderTaxiMapper orderTaxiMapper;
    @Resource
    private OrderCrossCityMapper orderCrossCityMapper;
    @Value("${callbackPath}")
    private String callbackPath;
@@ -173,159 +151,5 @@
        }).start();
        return ResultUtil.success();
    }
    @Override
    public ResultUtil saveOrderPrivateCar(Integer uid, Integer serverCarModelId, Date travelTime, Integer orderType, String placementLon, String placementLat, String startLon, String startLat, String startAddress, String endLon, String endLat, String endAddress, String passengers, String passengersPhone, Integer driverId) throws Exception {
        //如果出行时间大于当前10分钟则默认为预约单
        Integer reservation = 1;
        if(travelTime.getTime() > (System.currentTimeMillis() + 600000)){
            reservation = 2;
        }
        Dispatch dispatch = dispatchService.selectById(uid);
        UserInfo userInfo = userInfoService.selectOne(new EntityWrapper<UserInfo>().eq("phone", passengersPhone).ne("flag", 3));
        if(userInfo == null){
            userInfo = new UserInfo();
            userInfo.setName(passengers);
            userInfo.setPhone(passengersPhone);
            userInfo.setCompanyId(dispatch.getCompanyId());
            userInfo.setState(1);
            userInfo.setFlag(1);
            userInfo.setInsertTime(new Date());
            userInfoService.insert(userInfo);
        }
        /**
         * 1.出租车、专车、跨城有待支付的订单不能叫车
         * 2.小件物流有未完成的订单可以下跨城、专车、出租车
         * 3.出租车、专车、跨城有预约单可以下即时单
         */
        List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(userInfo.getId(), null, 1, 7, 12);
        if(orderPrivateCars.size() > 0){
            return ResultUtil.error("乘客有未完成的订单");
        }
        List<OrderTaxi> list = orderTaxiMapper.queryByState(userInfo.getId(), null, 1, 7, 12);
        if(list.size() > 0){
            return ResultUtil.error("乘客有未完成的订单");
        }
        List<OrderCrossCity> orderCrossCities1 = orderCrossCityMapper.queryByState(userInfo.getId(), 7, 12);
        if(orderCrossCities1.size() > 0){
            return ResultUtil.error("乘客有未完成的订单");
        }
        if(reservation == 1){
            orderPrivateCars = orderPrivateCarMapper.queryByState(userInfo.getId(), 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12);
            if(orderPrivateCars.size() > 0){
                return ResultUtil.error("乘客有未完成的订单");
            }
            list = orderTaxiMapper.queryByState(userInfo.getId(), 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12);
            if(list.size() > 0){
                return ResultUtil.error("乘客有未完成的订单");
            }
        }
        startAddress = startAddress.replaceAll("& #40;", "(");
        startAddress = startAddress.replaceAll("& #41;", ")");
        endAddress = endAddress.replaceAll("& #40;", "(");
        endAddress = endAddress.replaceAll("& #41;", ")");
        OrderPrivateCar orderPrivateCar = new OrderPrivateCar();
        orderPrivateCar.setType(1);
        orderPrivateCar.setUserId(userInfo.getId());
        orderPrivateCar.setServerCarModelId(serverCarModelId);
        orderPrivateCar.setOrderNum(this.getOrderNum());
        orderPrivateCar.setPlacementLon(Double.valueOf(placementLon));
        orderPrivateCar.setPlacementLat(Double.valueOf(placementLat));
        Map<String, String> geocode = gdMapGeocodingUtil.geocode(placementLon, placementLat);
        orderPrivateCar.setPlacementAddress(geocode.get("address"));
        orderPrivateCar.setStartLon(Double.valueOf(startLon));
        orderPrivateCar.setStartLat(Double.valueOf(startLat));
        orderPrivateCar.setStartAddress(startAddress);
        orderPrivateCar.setEndLon(Double.valueOf(endLon));
        orderPrivateCar.setEndLat(Double.valueOf(endLat));
        orderPrivateCar.setEndAddress(endAddress);
        orderPrivateCar.setSubstitute(0);
        orderPrivateCar.setPassengers(passengers);
        orderPrivateCar.setPassengersPhone(passengersPhone);
        orderPrivateCar.setState(1);
        orderPrivateCar.setInsertTime(new Date());
        orderPrivateCar.setTravelTime(travelTime);
        orderPrivateCar.setOrderType(reservation);
        orderPrivateCar.setOrderSource(5);
        if(null != driverId){
            Driver driver = driverService.selectById(driverId);
            if(null == driver){
                return ResultUtil.error("司机信息有误,无法完成下单");
            }
            if(driver.getAuthState() == 1){
                return ResultUtil.error("司机信息还未完成审核,无法完成下单");
            }
            if(driver.getAuthState() == 3){
                return ResultUtil.error("司机账户已被冻结,无法提供服务");
            }
            if(driver.getAuthState() == 4){
                return ResultUtil.error("司机信息未通过审核,无法提供服务");
            }
            if(driver.getState() == 1){
                return ResultUtil.error("司机还未上线,无法提供服务");
            }
            if(driver.getState() == 3){
                return ResultUtil.error("司机正在服务中,无法提供服务");
            }
            List<DriverService> query = driverServiceService.query(driverId, 1);
            if(query.size() == 0){
                return ResultUtil.error("该司机不能服务此业务");
            }
            orderPrivateCar.setDriverId(driverId);
            orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : (
                    driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1));
            orderPrivateCar.setState(2);
            orderPrivateCar.setCarId(driver.getCarId());
            CarService query1 = carServiceMapper.query(1, driver.getCarId());
            orderPrivateCar.setServerCarModelId(query1.getServerCarModelId());
            orderPrivateCar.setSnatchOrderTime(new Date());
//            //调用高德创建轨迹
//            String s = gdFalconUtil.selectTerminal(driver.getPhone());
//            String track = gdFalconUtil.createTrack(s);
//            orderPrivateCar.setTrackId(track);
//
            //调用移动的小号接口
            Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000));
            if(String.valueOf(map.get("code")).equals("200")){
                orderPrivateCar.setTelX(map.get("telX"));
                orderPrivateCar.setBindId(map.get("bindId"));
            }
            driver.setState(3);
            driverService.updateById(driver);
        }
        orderPrivateCar.setIsReassign(1);
        orderPrivateCar.setIsDelete(1);
        this.insert(orderPrivateCar);
        UserInfo finalUserInfo = userInfo;
        new Thread(new Runnable() {
            @Override
            public void run() {
                pushUtil.pushOrderState(1, finalUserInfo.getId(), orderPrivateCar.getId(), 1, 2, 0);
                pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0);
                pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1);
            }
        }).start();
        //添加消息
        systemNoticeService.addSystemNotice(1, "您的专车订单已下单成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1);
        BaseWarpper baseWarpper = new BaseWarpper();
        baseWarpper.setId(orderPrivateCar.getId());
        return ResultUtil.success(baseWarpper);
    }
    public synchronized String getOrderNum() throws Exception{
        int size = this.selectCount(null);
        return "PRIVATE" + String.valueOf(1000000 + size + 1).substring(1);
    }
}