package com.stylefeng.guns.modular.system.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; 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.dao.DriverWorkMapper; import com.stylefeng.guns.modular.system.model.Driver; import com.stylefeng.guns.modular.system.model.DriverService; import com.stylefeng.guns.modular.system.model.DriverWork; import com.stylefeng.guns.modular.system.service.ICompanyCityService; import com.stylefeng.guns.modular.system.service.IDriverService; import com.stylefeng.guns.modular.system.service.IDriverWorkService; import com.stylefeng.guns.modular.system.util.GDMapElectricFenceUtil; import com.stylefeng.guns.modular.system.util.GeodesyUtil; import com.stylefeng.guns.modular.system.warpper.BaseWarpper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; 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 implements IDriverService { @Resource private DriverMapper driverMapper; @Resource private DriverServiceMapper driverServiceMapper; @Resource private RedisTemplate redisTemplate; @Autowired private GDMapElectricFenceUtil gdMapElectricFenceUtil; @Autowired private ICompanyCityService companyCityService; @Autowired private GeodesyUtil geodesyUtil; @Autowired private IDriverWorkService driverWorkService; /** * 获取distance公里内空闲司机数量 * @param type 业务类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车) * @param lon * @param lat * @return * @throws Exception */ @Override public List queryIdleDriver(Integer type, Double lon, Double lat, Double distance, Integer companyId) throws Exception { List drivers = driverMapper.queryIdleDriver(type, companyId); List list = new ArrayList<>(); for(Driver driver : drivers){ String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driver.getId())); if(null != value){ Map distance1 = geodesyUtil.getDistance(lon + "," + lat, value); double d = Double.valueOf(distance1.get("WGS84")).doubleValue(); if(d < (distance * 1000)){ list.add(driver); } } } return list; } /** * 获取给定车型且空闲的司机 * @param type * @param serverCarModelId * @param lon * @param lat * @param distance * @param companyId * @return * @throws Exception */ @Override public List queryIdleDriver(Integer type, Integer serverCarModelId, Double lon, Double lat, Double distance, Integer companyId) throws Exception { List drivers = driverMapper.queryIdleDriver_(type, serverCarModelId, companyId); List list = new ArrayList<>(); for(Driver driver : drivers){ String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driver.getId())); if(null != value){ Map distance1 = geodesyUtil.getDistance(lon + "," + lat, value); double d = Double.valueOf(distance1.get("WGS84")).doubleValue(); if(d < (distance * 1000)){ driver.setDistance(d); list.add(driver); } } } return list; } @Override public List queryIdleDriver1(Integer type, Double lon, Double lat, Double distance, Integer companyId) throws Exception { List drivers = driverMapper.queryIdleDriver1(type, companyId); List list = new ArrayList<>(); for(Driver driver : drivers){ String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driver.getId())); if(null != value){ Map distance1 = geodesyUtil.getDistance(lon + "," + lat, value); double d = Double.valueOf(distance1.get("WGS84")).doubleValue(); if(d < (distance * 1000)){ list.add(driver); } } } return list; } /** * 根据订单id获取司机数据 * @param orderId * @return * @throws Exception */ @Override public Map queryOrderDriver(Integer orderId, Integer orderType) throws Exception { return driverMapper.queryOrderDriver(orderId, orderType); } /** * 获取司机详情 * @param id * @return * @throws Exception */ @Override public Map queryDriverInfo(Integer id) throws Exception { Map map = driverMapper.queryDriverInfo(id); return map; } /** * 获取司机的业务类型 * @param uid * @return * @throws Exception */ @Override public List queryBusiness(Integer uid) throws Exception { List list = driverServiceMapper.queryBusiness(uid, null); List maps = new ArrayList<>(); DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper().eq("driverId", uid).eq("state", 1)); if(null == driverWork){ return maps; } String type = driverWork.getType(); for (DriverService d : list){ if(d.getType() == 4 || d.getType() == 5 ||d.getType() == 6 || !type.contains(d.getType().toString())){ continue; } BaseWarpper baseWarpper = new BaseWarpper(); baseWarpper.setId(d.getType()); switch (d.getType()){ case 1: baseWarpper.setName("快车"); break; case 2: baseWarpper.setName("出租车"); break; case 3: baseWarpper.setName("跨城出行"); break; } maps.add(baseWarpper); } return maps; } }