package com.stylefeng.guns.modular.system.service.impl;
|
|
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
import com.stylefeng.guns.modular.system.dao.DriverMapper;
|
import com.stylefeng.guns.modular.system.dao.DriverServiceMapper;
|
import com.stylefeng.guns.modular.system.model.Company;
|
import com.stylefeng.guns.modular.system.model.Driver;
|
import com.stylefeng.guns.modular.system.model.DriverService;
|
import com.stylefeng.guns.modular.system.service.ICompanyCityService;
|
import com.stylefeng.guns.modular.system.service.IDriverService;
|
import com.stylefeng.guns.modular.system.util.GDMapElectricFenceUtil;
|
import com.stylefeng.guns.modular.system.util.GDMapGeocodingUtil;
|
import com.stylefeng.guns.modular.system.util.GeodesyUtil;
|
import com.stylefeng.guns.modular.system.util.GoogleMap.DistancematrixVo;
|
import com.stylefeng.guns.modular.system.util.GoogleMap.GoogleMapUtil;
|
import com.stylefeng.guns.modular.system.util.RedisUtil;
|
import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
|
@Service
|
public class DriverServiceImpl extends ServiceImpl<DriverMapper, Driver> implements IDriverService {
|
|
@Resource
|
private DriverMapper driverMapper;
|
|
@Resource
|
private DriverServiceMapper driverServiceMapper;
|
|
@Autowired
|
private RedisUtil redisUtil;
|
|
@Autowired
|
private GDMapElectricFenceUtil gdMapElectricFenceUtil;
|
|
@Autowired
|
private ICompanyCityService companyCityService;
|
|
|
|
/**
|
* 获取distance公里内空闲司机数量
|
* @param type 业务类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车)
|
* @param lon
|
* @param lat
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public List<Driver> queryIdleDriver(Integer type, Double lon, Double lat, Double distance, Integer companyId) throws Exception {
|
List<Driver> drivers = driverMapper.queryIdleDriver(type, companyId);
|
List<Driver> list = new ArrayList<>();
|
for(Driver driver : drivers){
|
String value = redisUtil.getValue("DRIVER" + String.valueOf(driver.getId()));
|
if(null != value){
|
Map<String, Double> distance1 = GeodesyUtil.getDistance(lon + "," + lat, value);
|
Double wgs84 = distance1.get("WGS84");
|
if(wgs84.compareTo(distance * 1000) < 0){
|
list.add(driver);
|
}
|
}
|
}
|
return list;
|
}
|
|
|
/**
|
* 获取给定车型且空闲的司机
|
* @param type
|
* @param serverCarModelId
|
* @param lon
|
* @param lat
|
* @param distance
|
* @param companyId
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public List<Driver> queryIdleDriver(Integer type, Integer serverCarModelId, Double lon, Double lat, Double distance, Integer companyId) throws Exception {
|
List<Driver> drivers = driverMapper.queryIdleDriver_(type, serverCarModelId, companyId);
|
List<Driver> list = new ArrayList<>();
|
for(Driver driver : drivers){
|
String value = redisUtil.getValue("DRIVER" + driver.getId());
|
if(null != value){
|
DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(lat, lon, Double.parseDouble(value.split(",")[1]), Double.parseDouble(value.split(",")[0]));
|
if(null != distancematrix){
|
if(distancematrix.getDistance() < (distance * 1000)){
|
list.add(driver);
|
}
|
}
|
|
}
|
}
|
return list;
|
}
|
|
|
/**
|
* 根据订单id获取司机数据
|
* @param orderId
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public Map<String, Object> queryOrderDriver(Integer orderId, Integer orderType) throws Exception {
|
return driverMapper.queryOrderDriver(orderId, orderType);
|
}
|
|
|
/**
|
* 获取司机详情
|
* @param id
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public Map<String, Object> queryDriverInfo(Integer id) throws Exception {
|
Map<String, Object> map = driverMapper.queryDriverInfo(id);
|
return map;
|
}
|
|
|
/**
|
* 获取司机的业务类型
|
* @param uid
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public List<BaseWarpper> queryBusiness(Integer uid, Integer language) throws Exception {
|
List<DriverService> list = driverServiceMapper.queryBusiness(uid, null);
|
List<BaseWarpper> maps = new ArrayList<>();
|
for (DriverService d : list){
|
BaseWarpper baseWarpper = new BaseWarpper();
|
baseWarpper.setId(d.getType());
|
switch (d.getType()){
|
case 1:
|
baseWarpper.setName(language == 1 ? "打车" : language == 2 ? "Ride" : "Course");
|
break;
|
case 2:
|
baseWarpper.setName("出租车");
|
break;
|
case 3:
|
baseWarpper.setName("跨城出行");
|
break;
|
case 4:
|
baseWarpper.setName(language == 1 ? "包裹" : language == 2 ? "Delivery" : "Livraison");
|
break;
|
case 5:
|
baseWarpper.setName("跨城小件物流");
|
break;
|
}
|
maps.add(baseWarpper);
|
}
|
return maps;
|
}
|
}
|